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/