2009-05-06 184 views
2

我有一个C++ DLL将int*返回给C#程序。问题是C#中的int*在赋值后仍然为null在C#中将IntPtr转换为int *?

当我将C++结果赋值给IntPtr时,我得到一个正确的非空值。然而,任何尝试将其转换为int*的结果都是null

我已经试过:

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. 

我怎样才能得到一个非空int*

谢谢! 艾伦

+0

我使用MSVCRT.DLL标准的malloc()函数 “cppFunction()”。它对我来说很好,我甚至可以读/写分配的内存位置。 当我将一个随机数赋给intp(IntPtr intp =(IntPtr)1000;)时,我只有在解引用时才得到一个NullPointerException。尽管如此,指针的值从来不为空... 你能给我一个小的,完整的程序,产生不正确的结果吗? – Hali 2009-11-24 00:46:33

+0

您是否可以选择重构C++,以便您可以在IntPtr中传递所需的内存分配?这样会更好 - 或者按照http://stackoverflow.com/questions/9378626/how-can-i-return-a-stringbuilder-or-other-string-在C#中调用回调来分配内存。缓冲区从一个pinvoke本机ca – dice 2012-02-29 15:16:27

回答