Convertir IntPtr int* en C#?
J'ai une DLL C++ retour d'un int*
d'un programme C#. Le problème est le int*
en C# reste null
après la cession.
Quand j'assigne le C++ résultat à un IntPtr
, je obtenir une juste valeur non null. Cependant, toute tentative de convertir ce pour une int*
résultats dans 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 une valeur non nulle int*
?
Merci!
Alan
- J'ai utilisé la norme de malloc() de la fonction de msvcrt.dll en tant que "cppFunction()". Il a travaillé très bien pour moi, je pourrais même en lecture/écriture de la mémoire allouée emplacement. Quand j'ai attribué un numéro au hasard intp (IntPtr intp = (IntPtr)1000;), j'ai eu une NullPointerException seulement quand un déréférencement. Encore, la valeur du pointeur n'a jamais été nul... Pouvez-vous me donner un petit programme complet qui produit des résultats incorrects?
- avez-vous la possibilité de refactoring du C++, de sorte que vous pouvez passer dans un IntPtr avec de la mémoire allouée? il serait mieux de cette façon - ou de raccorder un rappel pour allouer de la mémoire en C# comme par stackoverflow.com/questions/9378626/...
Vous devez vous connecter pour publier un commentaire.
Vous cppFunction déclaration doit être quelque chose comme:
Qui devrait résoudre votre problème.
Vous pouvez trouver cela utile aussi:
http://www.pcreview.co.uk/forums/thread-2902012.php