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