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

时间:2012-12-02 10:06:12

标签: 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);

不应该这样吗?为什么或为什么不呢?

1 个答案:

答案 0 :(得分:2)

您应该在声明中使用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 ++代码写的不止于此,您的应用程序将崩溃。