Partager via


Comment : convertir System::String en wchar_t * ou char*

Vous pouvez utiliser PtrToStringChars dans Vcclr.h pour convertir String en wchar_t * ou char * natif. De cette manière, un pointeur de chaîne Unicode étendu est toujours retourné, car les chaînes CLR sont Unicode en interne. Vous pouvez ensuite effectuer la conversion du pointeur étendu comme illustré dans l'exemple suivant.

Exemple

// convert_string_to_wchar.cpp
// compile with: /clr
#include < stdio.h >
#include < stdlib.h >
#include < vcclr.h >

using namespace System;

int main() {
   String ^str = "Hello";

   // Pin memory so GC can't move it while native function is called
   pin_ptr<const wchar_t> wch = PtrToStringChars(str);
   printf_s("%S\n", wch);

   // Conversion to char* :
   // Can just convert wchar_t* to char* using one of the 
   // conversion functions such as: 
   // WideCharToMultiByte()
   // wcstombs_s()
   // ... etc
   size_t convertedChars = 0;
   size_t  sizeInBytes = ((str->Length + 1) * 2);
   errno_t err = 0;
   char    *ch = (char *)malloc(sizeInBytes);

   err = wcstombs_s(&convertedChars, 
                    ch, sizeInBytes,
                    wch, sizeInBytes);
   if (err != 0)
      printf_s("wcstombs_s  failed!\n");

    printf_s("%s\n", ch);
}
  

Voir aussi

Référence

Utilisation de l'interopérabilité C++ (PInvoke implicite)