我试图在非托管 C++ DLL 上调用一个函数,搜索我接近但我无法让它完全工作的 stackoverflow 帖子。
在 .h 文件中声明如下:
extern int SomeDLLMethod(const char **data, int *count);
数据是一个字符串
我在 C# 中声明如下:
[DllImport("mydll.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int SomeDLLMethod(IntPtr data, ref int count);
然后我可以从 C# 调用它,如下所示:
unsafe
{
fixed (byte* buffer = new byte[MAX_LENGTH])
{
IntPtr ptr = new IntPtr(buffer);
int count = 0;
var retVal = SomeDLLMethod(ptr, ref count);
var dataString = Marshal.PtrToStringAuto(ptr);
Console.WriteLine(dataString);
}
}
调用成功,缓冲区中有计数和数据,但是如何将这个值读回 C# 字符串?
元帅的方法给了我垃圾