J'ai une DLL C++ renvoyant un int*
à un programme C#. Le problème est le int*
dans C# reste null
après l'affectation.Convertir IntPtr en int * en C#?
Lorsque j'attribue le résultat C++ à un IntPtr
, j'obtiens une valeur non nulle correcte. Cependant, toute tentative de conversion en int*
donne null
.
J'ai essayé:
IntPtr intp = cppFunction(); // Non-null.
int* pi = (int *) intp; // Results in null.
int* pi = (int *) intp.ToPointer(); // Results in null.
void* vp = intp.ToPointer();
int* pi = (int *) vp; // Results in null, but vp is non-null.
Comment puis-je obtenir un int*
non nul?
Merci! Alan
J'ai utilisé la fonction malloc() standard de msvcrt.dll comme "cppFunction()". Cela a bien fonctionné pour moi, je pouvais même lire/écrire l'emplacement de la mémoire allouée. Lorsque j'ai affecté un nombre aléatoire à intp (IntPtr intp = (IntPtr) 1000;), j'ai reçu une exception NullPointerException uniquement lors de la déréférence. Pourtant, la valeur du pointeur n'a jamais été nulle ... Pouvez-vous me donner un petit programme complet qui produit des résultats incorrects? – Hali
avez-vous la possibilité de refactoriser le C++ afin que vous puissiez transmettre un IntPtr avec la mémoire requise allouée? il serait mieux de cette façon - ou connecter un rappel pour allouer la mémoire en C# selon http://stackoverflow.com/questions/9378626/how-can-i-return-a-stringbuilder-or-other-string- tampon-de-un-pinvoke-native-ca – dice