int*
을 C# 프로그램에 반환하는 C++ DLL이 있습니다. 문제는 C#의 int*
이 할당 후 null
인 채로 남아 있다는 것입니다.C#에서 IntPtr을 int *로 변환 하시겠습니까?
IntPtr
에 C++ 결과를 할당 할 때 올바른 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.
이 어떻게 널이 아닌 int*
을받을 수 있나요?
감사합니다. 앨런
나는대로 MSVCRT.DLL에서 표준의 malloc() 함수를 사용 "cppFunction()". 그것은 나를 위해 괜찮 았는데, 심지어는/할당 된 메모리 위치를 쓸 수 있습니다. intp (IntPtr intp = (IntPtr) 1000;)에 임의의 숫자를 할당하면 역 참조하는 경우에만 NullPointerException이 발생합니다. 그래도 포인터의 값이 null이 아니 었습니다 ... 잘못된 결과를 생성하는 작고 완전한 프로그램을 제공 할 수 있습니까? – 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