我一直在這一整天陷入困境,但似乎至少使用緊湊框架從本機代碼調用一個C#方法,該方法的代碼爲返回一個字符串。從本地調用C#以檢索字符串
我見過有關從本地代碼傳遞數據到本地代碼的幾個例子,但沒有一個例子使用返回值。
我想要做的是有一個C#函數,返回一個字符串,這樣我就可以將它從C#拉回到C++,即從C++調用C#而不是其他方式。
String GetSomeString() { return "foo"; } // C#
並調用來自本地代碼此功能這將有這樣的簽名:
typedef const wchar_t * (__stdcall * native_func_t)();
這裏的問題是,它是行不通的。當我將委託傳遞給本機代碼時,會引發NotSupportedException。但是,如果我通過void替換字符串返回類型,它完美地工作。
其他的解決方案是:
調用C#從C++來獲取字符串長度,分配在C++該字符串,將它傳遞給C#,使其使用不安全的代碼填充緩衝區。但這是骯髒和不切實際的,所以我不會那樣做。
使C#函數調用C++,該C++將結果存儲在某處,並且在本地代碼中,一旦C#調用返回,就會在存儲結果的位置檢索結果。但這也是非常醜陋和不切實際的。
您是否看到另一種方式來做到這一點?
是怎樣的C++二進制文件加載C#組件?這是來自回調,並且過程本身是託管代碼? – ctacke
我會使用COM BSTR。也就是說,在C++端分配是一個不錯的選擇。沒有對這個主題的更深入的理解,你不應該這樣說。 –
@ctake其實它是一個Windows窗體應用程序。 C#處理GUI,但所有其餘工作都由本機代碼完成。 – Virus721