none
Converter String^ para wchar_t* RRS feed

  • Pergunta

  • Bom dia para todos

    Como eu converto String^para wchar_t?

    Porque eu consegui usando

    pin_ptr

     

     

    <const wchar_t> wch = PtrToStringChars(String^);

    porem quando coloco num for a variável wch não altera.

    Como eu faço para "limpar" a variável wch?


    Bacharel em Ciência da Computação
    terça-feira, 15 de fevereiro de 2011 12:38

Todas as Respostas

  • Para converter de managed string para native string ou vice-versa: http://msdn.microsoft.com/en-us/library/bb384865.aspx

    Para o seu caso:

    #include <iostream>
    using namespace std;

    #include <msclr\marshal.h>
    using namespace msclr::interop;

    int main()
    {
      System::String^ gc_str = gcnew System::String("From managed string to const wchar_t*");
      
      marshal_context mrsl_ctx;
      const wchar_t* str = mrsl_ctx.marshal_as<const wchar_t*>( gc_str );

      wcout << str;
    }


    Fabio Galuppo
    • Sugerido como Resposta Fabio Galuppo quarta-feira, 9 de março de 2011 16:21
    segunda-feira, 21 de fevereiro de 2011 17:50
  • Bom dia...

    Então o meu problema está sendo o seguinte, tenho um arquivo xml e nele contêm os nomes das câmeras.

    		XmlDocument^ doc = gcnew XmlDocument();
    		doc->Load(dirVDB + "\\texte.xml");
    
    		XmlNodeList^ camList = doc->GetElementsByTagName("Camera");
    
    		for (int i=0; i < camList->Count; i++)
    		{
    			String^ ip = camList->Item(i)->Attributes["IpAddress"]->InnerText;
    			String^ name = camList->Item(i)->Attributes["Name"]->InnerText;
    									
    			pin_ptr<const wchar_t> wch = PtrToStringChars(name);
    
    		}
    
    

    Por exemplo, tenho as câmeras: Teste1 e Teste2.

    O problema é que a variável wch só exibe Texte2 ao invés de exiber Teste1 e depois Teste2.


    Bacharel em Ciência da Computação
    terça-feira, 22 de fevereiro de 2011 13:24
  • 1. Como disse anteriormente, a melhor forma para converter a string é usando marshal_as.

    for(...)

    {

    ...

    marshal_context mrsl_ctx; 

    const wchar_t* str = mrsl_ctx.marshal_as<const wchar_t*>( name );

    wcout << str;

    }

    2. Verifique se o Count está retornando o número de elementos corretamente, bem como se o acesso ao DOM está correto.


    Fabio Galuppo
    sexta-feira, 25 de fevereiro de 2011 14:21
  • Boa tarde...

    Então a variável String^ name está recebendo os valores do XML. O problema está sendo a variável wch que recebo o primeiro valor e fica constante, não recebendo os demais valores de name.

    Não têm um jeito de limpar wch para receber  o próximo name?

     

    Att.


    Bacharel em Ciência da Computação
    segunda-feira, 7 de março de 2011 16:15