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/...
InformationsquelleAutor user20493 | 2009-05-06