C# - 编组一个const char *从dll返回值

时间:2017-10-12 18:36:22

标签: c# dllimport

我在dll中有一个带有以下标识符的函数。

const char* function(void)

DLL在堆上分配字符串并期望只读取它。我已尝试以下方法导入该功能,但我遇到了访问冲突

[DllImport("great.dll", CharSet = CharSet.Ansi, 
                        CallingConvention = CallingConvention.Cdecl)
]
public static extern string function();

如何正确处理

错误讯息:

  

System.AccessViolationException:'尝试读取或写入受保护的内存。这通常表明其他内存已损坏。'

1 个答案:

答案 0 :(得分:2)

关于问题中的文字 ""对于具有相同参数类型的其他函数,我已经能够使用[MarshalAs(UnmanagedType.LPStr)]来处理它,但这不适用于返回值。"

引用此内容 https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshalasattribute?view=netframework-4.7

//Applied to a return value.
[return: MarshalAs(UnmanagedType.LPWStr)]
    public String GetMessage()
    {
        return "Hello World";
    }

更新:保留这一点以防其他人搜索" MarshalAs"并且返回值,因为问题的作者已经在上面的评论中解决了他们的问题