2011-09-29 71 views
-1

我有一個Interop包裝到一些非託管DLL調用,通過輸出參數返回詳細信息。該功能顯示如下:帶有輸出參數的C++/CLI調用Interop包裝方法

_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

是什麼'出UInt32的value'意味着非託管代碼的情況下?也就是說,C/C++中的「out」是什麼? – ildjarn

回答

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