【问题标题】:Passing char * parameter to C# function将 char * 参数传递给 C# 函数
【发布时间】: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);

这不应该吗?为什么或为什么不?

【问题讨论】:

标签: c# c++ dll


【解决方案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的方法中的数组中,这显然意味着要检索一个文本字符串。跨度>
猜你喜欢
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多