我有一段代码,我想知道它是否正确:

你好

static const char _someGlovalVar[] = "my persistant gloval variable";


const char* DLLInterfaceGetName()
{
    return _someGlovalVar;
}


你好

DLL_EXPORT const char* DLLInterfaceGetName();


hello.cs

[DllImport("hello.dll", EntryPoint = "DLLInterfaceGetName", CharSet = CharSet.Ansi)]
public static extern string DLLInterfaceGetName();


它是否正确?

最佳答案

将您的返回值更改为IntPtr而不是字符串。

[DllImport("hello.dll", EntryPoint = "DLLInterfaceGetName", CharSet = CharSet.Ansi)]
public static extern IntPtr DLLInterfaceGetName();


然后,当您在C#代码中调用它时,将指针编组为C#字符串:

IntPtr cstr = DLLInterfaceGetName();
String str = Marshal.PtrToStringAnsi(cstr);


另外,仔细检查您在DLLImport上使用正确的调用约定。我有一个问题,因为它默认情况下使用StdCall,而我实际上想要的是Cdecl。

09-11 18:38