2009-05-06 182 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

回答