Obtenir un IntPtr à une variable ulong en C #
Question
Je dois passer un IntPtr à IStream.Read et IntPtr doit pointer vers une variable ulong. Comment puis-je obtenir ce IntPtr qui pointe vers ma variable ulong?
La solution
La meilleure façon est de changer la définition IStream:
void Read([Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] byte[] pv,
int cb, /*IntPtr*/ ref int pcbRead);
Ensuite, vous pouvez écrire
int pcbRead = 0;
Read(..., ref pcbRead);
Autres conseils
Je crois que vous devez utiliser la méthode GCHandle si vous voulez éviter le code dangereux. Je ne suis pas sûr de la façon dont cela fonctionne avec des types de valeur en boîte.
var handle = GCHandle.Alloc(myVar, GCHandleType.Pinned);
var ptr = handle.AddrOfPinnedObject()
Si vous ne pouvez pas utiliser le code dangereux essayez ce qui suit.
var myValue = GetTheValue();
var ptr = Marshal.AllocHGLobal(Marshal.SizeOf(typeof(ulong));
Marshal.StructureToPointer(ptr, myValue, false);
À un certain moment plus tard, vous devrez appeler Marshal.FreeHGlobal sur la valeur « PTR ».
var pointer = new IntPtr(&myVariable);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow