Si je devais copier la mémoire, je pense que ce qui suit fonctionnerait:
static Stream^ UnicodeStringToStream(LPCWSTR szUnicodeString)
{
//validate the input parameter
if (szUnicodeString == NULL)
{
return nullptr;
}
//get the length of the string
size_t lengthInWChars = wcslen(szUnicodeString);
size_t lengthInBytes = lengthInWChars * sizeof(wchar_t);
//allocate the .Net byte array
array^ byteArray = gcnew array(lengthInBytes);
//copy the unmanaged memory into the byte array
Marshal::Copy((IntPtr)(void*)szUnicodeString, byteArray, 0, lengthInBytes);
//create a memory stream from the byte array
return gcnew MemoryStream(byteArray);
}
Remarque: cette réponse ne fonctionne que dans un code dangereux. Si vous ne compilez pas avec l'indicateur non sécurisé, vous aurez peut-être plus de chance en rassemblant les données dans un tableau d'octets, puis en enveloppant ce tableau d'octets dans un flux. Voir ici: http://stackoverflow.com/a/11660831/684852 Cependant, vous devez connaître la longueur des données (nombre d'octets dans la chaîne unicode d'origine de votre pointeur). Par exemple: 'byte [] dataArray = nouvel octet [dataLength]; Marshal.Copy (szUnicodeString, dataArray, 0, dataLength); Flux MemoryStream = nouveau MemoryStream (dataArray); –