当使用DllImport时,在c#中包装c++引用参数

本文关键字:包装 c++ 引用 参数 DllImport | 更新日期: 2023-09-27 17:50:11

我正在尝试用c#代码包装一个具有引用参数的c++函数。
我的c#包装器类有

[DllImport(TestCppDLL.dll)]
public static extern void foo(out int a, out int b, out double c);
public void main()
{
    int a;
    int b;
    double c;
    this.foo(out a, out b, out c);
    Console.WriteLine(a + b + c);
}
我的c++代码是
extern void foo(int &a, int &b, double &c)
{
     a = 1;
     b = 2;
     c = 3;
}

所以我期望输出是"123",但我得到的是"000"。
如何包装c++引用参数?

提前感谢,

当使用DllImport时,在c#中包装c++引用参数

您的c++代码返回双精度类型,但您的c#代码声明该函数具有void返回值。

还可能有调用约定不匹配。c++默认为cdecl, c#默认为stdcall。