C ++ / CLI使用out参数调用Interop包装器方法

时间:2011-09-29 15:18:03

标签: c++-cli ref out

我有一个Interop包装器来处理一些非托管DLL调用,这些调用通过paremeter返回详细信息。功能如下所示:

_myWrapper->My_Method( ... out UInt32 value ... );

所以假设方法声明如下:

void My_Method(out UInt32 value);

如何在C ++ / CLI代码中调用此方法?我知道如何轻松地调用这样的参考方法:

void Another_Method(ref UInt32 value);

UInt32 _value;
_myWrapper->Another_Method(%_value);

我正在做一点阅读而我正在阅读它无法完成?我不相信......可能这不是不可能克服或解决方法,但你必须开玩笑吧?这是真的吗?

谢谢...

1 个答案:

答案 0 :(得分:4)

在C ++中,没有用于使用引用参数调用函数的特殊调用语法,您只需编写调用就像传递值一样。当然,您需要提供一个要覆盖的左值,不能使用算术表达式的右值(临时)结果。

顺便说一句,你调用ref函数的代码也是错误的,这可能是你麻烦的根源。

示例:

C#定义:

 void MySharpRef(ref int i)  { i = 4; }
 void MySharpOut(out int i)  { i = 5; }

C ++ / CLI定义:

 void MyPlusRef(System::Int32% i) { i = 14; }
 void MyPlusOut([System::Runtime::InteropServices::OutAttribute] System::Int32% i) { i = 15; }

C#电话:

 int j;
 o.MyPlusOut(out j);
 o.MyPlusRef(ref j);

C ++ / CLI调用:

 System::Int32 k;
 p->MySharpOut(k);
 p->MySharpRef(k);