我有一个代码,我想知道它是否正确:
hello.cpp
static const char _someGlovalVar[] = "my persistant gloval variable";
const char* DLLInterfaceGetName()
{
return _someGlovalVar;
}
你好。H
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。
它可以使用吗?在这种情况下,我认为您不必关心其他任何东西:)
尽管就个人而言,我有点担心如何处理。静态const char []指针可能在"代码"部分中,不是吗?希望,.NET MARSHALLER将字符串中的数据复制到其自己的字符串。我不确定CPP端如何处理此操作 - 不同的编译器可能会产生截然不同的输出吗?
,而且,您不应该在字符串的末端放一个