J’utilise une classe qui a le champ SsortingngHandle
qui est une valeur IntPtr
qui représente un LPCWSTR
en C ++.
internal IntPtr SsortingngHandle; // LPCWSTR
dis maintenant que j’ai une chaîne: ssortingng x = "abcdefg"
Comment puis-je utiliser le handle de chaîne pour pointer vers le début de la chaîne de sorte qu’il ressemble à C ++ LPCWSTR?
Vous devez d’abord copier la chaîne dans la mémoire non gérée, puis extraire IntPtr
de cet emplacement. Vous pouvez le faire comme:
IntPtr strPtr = Marshal.SsortingngToHGlobalUni(x);
De plus, vous devez vous assurer de libérer la mémoire non gérée:
Marshal.FreeHGlobal(strPtr);
il est préférable de faire tout cela en essayant / enfin.
Les chaînes gérées se déplacent en mémoire lorsque le ramasse-miettes compacte le tas. Ils n’ont donc pas d’adresse stable et ne peuvent pas être directement convertis en LPCWSTR. Vous devez soit épingler la chaîne avec GCHandle.Alloc () pour utiliser GCHandle.AddrOfPinnedObject ou la copier dans la mémoire non managée avec Marshal.SsortingngToHGlobalUni ().
Préférez fortement la copie si l’adresse doit être stable pendant un certain temps.
Vous souhaitez utiliser l’une des méthodes SsortingngTo * de la classe Marshal