C#调用C++动态库时字符串作为输出参数的问题
常常会觉得一个返回值不够,在C#中使用out
或者ref
都很方便,下文记录字符串类型作为传入参数且需要修改后返回的处理方式。
C++中的接口:
extern "C" __declspec(dllexport) void GetString(char* str);
C++中的实现:
void GetString(char* str)
{
// str字符串需要传出去,所以用的是外部给的一块空间,不要在这里重新为str做new
string a = "Ceshi";
// 注意这里长度需要加1
strcpy_s(str, a.length() + 1, a.c_str());
}
C#中的调用:
// 使用StringBuilder来存储这个字符串,要注意初始化足够的长度
StringBuilder sb = new StringBuilder(1024);
GetString(sb);