我正在尝试编写一些从非托管DLL调用方法的C#代码.dll中函数的原型是:
extern "C" __declspec(dllexport) char *foo(void);
Run Code Online (Sandbox Code Playgroud)
在C#中,我首先使用:
[DllImport(_dllLocation)]
public static extern string foo();
Run Code Online (Sandbox Code Playgroud)
它似乎在表面上工作,但我在运行时遇到内存损坏错误.我想我指的是记忆恰好是正确的,但已经被释放了.
我尝试使用名为"P/Invoke Interop Assistant"的PInvoke代码生成实用程序.它给了我输出:
[System.Runtime.InteropServices.DLLImportAttribute(_dllLocation, EntryPoint = "foo")]
public static extern System.IntPtr foo();
Run Code Online (Sandbox Code Playgroud)
它是否正确?如果是这样,我如何将此IntPtr转换为C#中的字符串?