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);
posted @ 2021-03-03 11:16  yutou2016  阅读(788)  评论(0编辑  收藏  举报