编组静态const char*从C 到C#



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

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端如何处理此操作 - 不同的编译器可能会产生截然不同的输出吗?

,而且,您不应该在字符串的末端放一个吗?呼叫者如何知道字符串仅使用char[]多长时间?我认为,如果它对您不起作用,这就是原因。

相关内容

  • 没有找到相关文章

最新更新