c# - 将 char * 参数传递给 C# 函数

标签 c# c++ dll

C++ win32dll1.dll:

extern "C" __declspec(dllexport) int getSerialNumber(char* outs)
{
    char s[2];
    s[0]='0';
    s[1]='1';

    for(int i=0; i < 2; ++i){
        outs[i] = s[i];
    }
    return 1;
}

C#:

[DllImport("win32dll1.dll")]
public unsafe static extern int getSerialNumber(char* ss);

无法在函数中传递s

char[] s = new char[2];
getSerialNumber(s);

这不应该起作用吗?为什么或为什么不?

最佳答案

您可能应该在声明中使用StringBuilder:

[DllImport("win32dll1.dll")]
public unsafe static extern int getSerialNumber(StringBuilder s);

CLR 会自动将其转换为 C++ char*,调用该函数,然后将结果转换回来并将其存储在 StringBuider 中。

用这样的方式调用它:

var sb = new StringBuilder(2);
getSerialNumber(sb);

该数字指定初始容量(以字符为单位)。在本例中,只有 2 个字符;如果 C++ 代码写入的内容超过此数量,您的应用程序将会崩溃。

关于c# - 将 char * 参数传递给 C# 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668266/

相关文章:

c# - 以编程方式获取 C# 堆栈跟踪

c# - 如何有效地存储/检索有关网格边缘的数据?

c++ - STL中的容量和复制

c# - 从 C# 读取非 .NET DLL 版本?

c++ - 加载时动态链接库调度

.net - 何时加载引用的程序集?

c# - ASP.Net C# GridView

c# - 如何识别字符串中的路径

c++ - 防止触摸输入在 Windows 上移动鼠标光标

c++ - FFMPEG,C++,内存泄漏,我做错了什么?