관리되지 않는 DLL에서 메서드를 호출하는 일부 C# 코드를 작성하려고합니다. DLL에있는 함수의 프로토 타입은 다음과 같습니다 C#에서P * char *를 반환하는 C 함수에 대한 호출 *
extern "C" __declspec(dllexport) char *foo(void);
이, 내가 먼저 사용 :
[DllImport(_dllLocation)]
public static extern string foo();
은 표면에 작동하는 것 같다,하지만 난 런타임시 메모리 손상 오류를 받고 있어요. 나는 올바른 기억을 가리키고 있다고 생각하지만, 이미 해제되었다.
"P/Invoke Interop Assistant"라는 PInvoke code gen 유틸리티를 사용해 보았습니다. 그것은 저에게 산출을주었습니다 :
[System.Runtime.InteropServices.DLLImportAttribute(_dllLocation, EntryPoint = "foo")]
public static extern System.IntPtr foo();
이것이 맞습니까? 그렇다면이 IntPtr을 C#의 문자열로 변환하려면 어떻게해야합니까?
이것은 나를 위해 일했습니다. 내가해야만 한 유일한 변화는'PtrToStringAnsi'에'PtrToStringAuto'이었습니다. 그렇지 않으면 몇개의 중국어 문자가 있습니다. – 3vts