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);
不应该这样吗?为什么或为什么不呢?
答案 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 ++代码写的不止于此,您的应用程序将崩溃。