Alguém pode postar um código simples que possa converter,
System::String^
Para,
C ++ std::string
Ou seja, eu só quero atribuir o valor de,
String^ originalString;
Para,
std::string newString;
string
c++-cli
managed-c++
Sivabudh
fonte
fonte
Você pode fazer isso facilmente da seguinte maneira
fonte
Isso funcionou para mim:
fonte
Aqui estão algumas rotinas de conversão que escrevi há muitos anos para um projeto c ++ / cli, elas ainda devem funcionar.
fonte
Passei horas tentando converter um valor ToString da caixa de listagem do Windows em uma string padrão para que eu pudesse usá-lo com fstream para gerar um arquivo txt. Meu Visual Studio não veio com arquivos de cabeçalho de empacotamento que várias respostas que encontrei diziam para usar. Depois de tantas tentativas e erros finalmente encontrei uma solução para o problema que apenas usa System :: Runtime :: InteropServices:
E aqui está a página do MSDN com o exemplo: http://msdn.microsoft.com/en-us/library/1b4az623(v=vs.80).aspx
Eu sei que é uma solução muito simples, mas isso me levou HORAS de solução de problemas e visitando vários fóruns para finalmente encontrar algo que funcionasse.
fonte
Eu descobri uma maneira fácil de obter um std :: string de um String ^ usando sprintf ().
Não há necessidade de chamar as funções do Marshal!
ATUALIZAÇÃO Graças a Eric, modifiquei o código de amostra para verificar o tamanho da string de entrada para evitar estouro de buffer.
fonte
OC # usa o formato UTF16 para suas strings.
Portanto, além de apenas converter os tipos, você também deve estar ciente do formato real da string.
Ao compilar para o conjunto de caracteres multibyte, o Visual Studio e a API do Win assume UTF8 (na verdade, a codificação do Windows é Windows-28591 ).
Ao compilar para o conjunto de caracteres Unicode, o Visual studio e a API Win assumem UTF16.
Portanto, você deve converter a string do formato UTF16 para UTF8 também, e não apenas converter para std :: string.
Isso se tornará necessário ao trabalhar com formatos de vários caracteres, como alguns idiomas não latinos.
A ideia é decidir que
std::wstring
sempre representa UTF16 .E
std::string
sempre representa UTF8 .Isso não é imposto pelo compilador, é mais uma boa política de se ter.
Ou use uma sintaxe mais compacta:
fonte
Gosto de ficar longe do marshaller.
Parece muito mais limpo e rápido para mim. Não precisa se preocupar em criar e excluir um contexto.
fonte
// Usei VS2012 para escrever o código abaixo - convert_system_string para Standard_Sting
fonte