faire en sorte que IntPtr dans C # .NET pointe sur une valeur de chaîne

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