我有一个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);
我正在做一点阅读而我正在阅读它无法完成?我不相信......可能这不是不可能克服或解决方法,但你必须开玩笑吧?这是真的吗?
谢谢...
答案 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);