我有一段代码,我想知道它是否正确:
你好
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。