C++ cli C++/CLI使用out参数调用互操作包装器方法

C++ cli C++/CLI使用out参数调用互操作包装器方法,c++-cli,ref,out,C++ Cli,Ref,Out,我为一些非托管DLL调用提供了一个互操作包装器,这些调用通过参数表返回详细信息。功能如下所示: _myWrapper->My_Method( ... out UInt32 value ... ); void My_Method(out UInt32 value); 因此,假设方法是这样声明的: _myWrapper->My_Method( ... out UInt32 value ... ); void My_Method(out UInt32 value); 然后如何从C+

我为一些非托管DLL调用提供了一个互操作包装器,这些调用通过参数表返回详细信息。功能如下所示:

_myWrapper->My_Method( ... out UInt32 value ... );
void My_Method(out UInt32 value);
因此,假设方法是这样声明的:

_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);
我正在读一点书,我正在读,不能吗?我不相信。。。这可能不是不可能克服或解决的,但你一定是在开玩笑吧?这是真的吗


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

顺便说一句,您调用
ref
函数的代码也是错误的,这可能是您遇到问题的根源

例如:

C#定义:

 void MySharpRef(ref int i)  { i = 4; }
 void MySharpOut(out int i)  { i = 5; }
 void MyPlusRef(System::Int32% i) { i = 14; }
 void MyPlusOut([System::Runtime::InteropServices::OutAttribute] System::Int32% i) { i = 15; }
C++/CLI定义:

 void MySharpRef(ref int i)  { i = 4; }
 void MySharpOut(out int i)  { i = 5; }
 void MyPlusRef(System::Int32% i) { i = 14; }
 void MyPlusOut([System::Runtime::InteropServices::OutAttribute] System::Int32% i) { i = 15; }
电话:

C++/CLI调用:

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

在非托管代码的上下文中,
out UInt32 value
意味着什么?也就是说,C/C++中的
out
是什么?