私はint*
をC#プログラムに返すC++ DLLを持っています。問題は、C#のint*
が割り当て後にnull
のままであることです。C#でIntPtrをint *に変換しますか?
C++の結果をIntPtr
に割り当てると、null以外の正しい値が得られます。ただし、これを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.
にはどうすればnull以外int*
を得ることができますか?
ありがとうございます!あなたの問題を解決する必要があり
void cppFunction(ref int* ptr) {
ptr = somevalue;
}
: アラン
私は "cppFunction()" とはmsvcrt.dllから標準のmalloc()関数を使用しました。それは私のために大丈夫だった、私は読んだ/割り当てられたメモリの場所を書き込むことができます。 intp(IntPtr intp =(IntPtr)1000;)に乱数を割り当てたときに、逆参照するときにのみNullPointerExceptionが発生しました。それでも、ポインタの値は決してヌルではありませんでした... あなたは私に間違った結果をもたらす小さくて完全なプログラムを与えることができますか? – Hali
必要なメモリを割り当ててIntPtrを渡すことができるように、C++をリファクタリングするオプションがありますか?そのようにする方がいいでしょう - あるいは、C#でメモリを割り当てるコールバックをフックしてください。http://stackoverflow.com/questions/9378626/how-can-i-return-a-stringbuilder-or-other-string- buffer-from-a-pinvoke-native-ca – dice