似乎必須有一個重複的問題,但我一直沒能找到它。通過引用從C++/CLI傳遞給C#
我正在編寫一個橋樑讓舊的C程序訪問一些C#對象。橋是用C++/CLI編寫的。
在一種情況下,存在這樣的已定義爲C#功能:
public static string GetNameAndValue(out int value);
我的C++/CLI包裝函數:
char* GetNameAndValue(int* value);
這是很容易從C呼叫,但我怎麼從C++/CLI調用C#方法?
我第一次嘗試了很明顯的:
String^str;
str = TheObject::GetNameAndValue(value);
這給了我錯誤C2664:無法從 '詮釋*' 到 '廉政%' 轉換參數2。
好的,那麼GetNameAndValue(%value)
怎麼樣?這給了我錯誤C3071:運算符'%'只能應用於ref類或值類型的實例。
不夠公平。所以如果我創建一個int
我可以通過%
?
int foo;
str = TheObject::GetNameAndValue(%ix);
沒有骰子。再次C3071。其中我覺得奇怪,因爲int
絕對是是的一種值類型。或者是?
必須有%,^,&或一些其他淫穢的魔術組合,將做我想做的事情,但在這個事情發誓30分鐘後,我很難過。在Google搜索C++/CLI和C#的不同組合大多提供了有關如何從C#調用C++的信息。
SO,我的問題:你如何將C++/CLI中的int
傳遞給期望out int
(或ref int
,如果必須的話)的C#方法?
你有事情嚴重倒退。 C++/CLI很容易讓C程序調用C#方法。它是從託管代碼到本地代碼的另一種方式的語言擴展。從本地程序運行託管代碼需要更大的武器,它必須首先加載並初始化CLR。這將需要超過30分鐘才能理清。 –
@HansPassant:這不是我在短時間內的工作經驗。我的C程序調用一個用C++/CLI編譯的DLL,而C++/CLI又調用另一個程序集中的C#代碼。工作得很好。據我瞭解,C++/CLI DLL加載運行時。無論如何,我已經能夠將C#代碼中的信息返回給C代碼。 –
C++/CLI支持__declspec(dllexport),這是我能想到的唯一場景,您可以從中獲得好運。與Giesecke的[DllExport]黑客相同的想法。正如所發佈的,你的問題對我來說毫無意義,你遇到的問題完全正常。祝你好運。 –