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