函数签名:

char * errMessage(int err);

我的代码:

[DllImport("api.dll")]
内部静态外部字符 [] errMessage(int err);
...
char[] message = errMessage(err);

这将返回一个错误:

无法编码(marshal)“返回值”:无效的托管/非托管类型组合。

我究竟做错了什么?谢谢你的帮助。

最佳答案

试试这个:

[DllImport("api.dll")]
[return : MarshalAs(UnmanagedType.LPStr)]
internal static extern string errMessage(int err);
...
string message = errMessage(err);

我相信 C# 足够聪明,可以处理指针并返回一个字符串。

编辑:添加了 MarshalAs 属性

关于c# - 如何正确地将 char * 从非托管 DLL 返回到 C#?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1757448/

10-13 06:26