【发布时间】:2009-05-06 17:47:18
【问题描述】:
我有一个 C++ DLL 将 int* 返回给 C# 程序。问题是 C# 中的 int* 在赋值后仍然是 null。
当我将 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。尽管如此,指针的值永远不会为空......你能给我一个产生不正确结果的小而完整的程序吗?
-
您是否可以选择重构 C++ 以便可以传入分配了所需内存的 IntPtr?那样会更好 - 或者按照stackoverflow.com/questions/9378626/… 连接回调以在 C# 中分配内存
标签: c# pointers intptr managed-code