【问题标题】:Wrapping C++ reference parameter in C# when using DllImport使用 DllImport 时在 C# 中包装 C++ 引用参数
【发布时间】:2011-08-06 00:15:26
【问题描述】:

我正在尝试使用 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++ 引用参数?

提前谢谢你,

【问题讨论】:

    标签: c# c++ wrapper pass-by-reference dllimport


    【解决方案1】:

    您的 C++ 代码返回一个双精度值,但您的 C# 代码将该函数声明为具有 void 返回值。

    您也可能存在调用约定不匹配的问题。 C++ 默认为 cdecl,C# 默认为 stdcall。

    否则没关系。

    【讨论】:

    • 糟糕,返回类型只是一个错字。但我会检查约定不匹配。
    猜你喜欢
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    相关资源
    最近更新 更多