将 char * 参数传递给 C# 函数

Passing char * parameter to C# function

本文关键字:函数 参数传递 char      更新时间:2023-10-16

>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++代码写入的更多内容,则应用将崩溃。