我在dll中有一个带有以下标识符的函数。
const char* function(void)
DLL在堆上分配字符串并期望只读取它。我已尝试以下方法导入该功能,但我遇到了访问冲突
[DllImport("great.dll", CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.Cdecl)
]
public static extern string function();
如何正确处理
错误讯息:
System.AccessViolationException:'尝试读取或写入受保护的内存。这通常表明其他内存已损坏。'
答案 0 :(得分:2)
关于问题中的文字 ""对于具有相同参数类型的其他函数,我已经能够使用[MarshalAs(UnmanagedType.LPStr)]来处理它,但这不适用于返回值。"
//Applied to a return value.
[return: MarshalAs(UnmanagedType.LPWStr)]
public String GetMessage()
{
return "Hello World";
}
更新:保留这一点以防其他人搜索" MarshalAs"并且返回值,因为问题的作者已经在上面的评论中解决了他们的问题