2

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);

这不应该工作吗?为什么或者为什么不?

4

1 回答 1

3

您可能应该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++ 代码写的更多,您的应用程序将崩溃。

于 2012-12-02T10:09:26.857 回答