将 char * 参数传递给 C# 函数
Posted
技术标签:
【中文标题】将 char * 参数传递给 C# 函数【英文标题】:Passing char * parameter to C# function 【发布时间】:2012-12-02 10:06:11 【问题描述】: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);
这不应该吗?为什么或为什么不?
【问题讨论】:
可能重复 ***.com/questions/683013/… ***.com/questions/2179270/… ***.com/questions/4455234/… 【参考方案1】:你应该在声明中使用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++ 代码写的比这多,你的应用就会崩溃。
【讨论】:
我不认为 OP 想要 一个字符串。查看问题中提供的示例数据,我认为byte[]
会更合适。
@KonradRudolph - 在这种情况下,他们可以将String
转换为byte[]
。谁知道作者想要他们的问题是模糊的。
问题中的示例清楚地把characters放入了一个名为getSerialNumber的方法中的数组中,这显然意味着要检索一个文本字符串。跨度>
以上是关于将 char * 参数传递给 C# 函数的主要内容,如果未能解决你的问题,请参考以下文章