-1

我有一些非托管 DLL 调用的互操作包装器,这些调用通过 out 参数返回详细信息。函数如下所示:

_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);

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

谢谢...

4

1 回答 1

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);
于 2011-09-29T15:53:05.237 回答