将 char * 参数传递给 C# 函数
Passing char * parameter to C# function
>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++中将迭代器作为函数参数传递
- 为什么我不能将引用作为 std::async 的函数参数传递
- 节点插件 API 将数组作为函数参数传递
- 将字符串数组作为函数参数传递
- 如何通过 C++ 中的函数参数传递初始值设定项列表的固定大小的初始值设定项列表?
- 我可以动态创建新地图并作为函数参数传递吗?
- 将任意模板向量作为函数参数C++传递
- 将函数指针作为函数参数传递的目的
- C++:通过函数参数传递的值给出不同的结果
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 通过宏将函数参数传递给函数
- C++:访问作为函数参数传递的双指针数组所指向的变量的值
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 将派生类构造函数参数传递给受保护的成员
- 将指向数组的指针作为函数参数传递,这本身就是另一个函数的返回值?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 如何将派生类作为函数参数传递:如果派生类成员不在父类中怎么办
- 如何将变量作为构造函数参数或函数参数传递
- 当数组对象以函数参数传递时,为什么复制构造函数会自称