2009-04-24 179 views
1

我想要調用從C#下面的C++函數(由DLL導出):編組引用類型從C++到C#

void createVm( 
    const jace::VmLoader& loader, 
    const jace::OptionList& options, 
    bool ignoreUnrecognized = true); 

我發現文檔編組由C原語++到C#,但我m不確定如何處理引用類型或非原型類型,如VmLoader或OptionList(這兩個類都是類)。我試圖用一個C#層封裝一個C++ API,委託給實際方法實現的底層C++代碼。

任何想法?

回答

4

AFAIK,PInvoking與C++構造函數不支持的操作。你可能可以讓它工作,但我認爲你會發現問題。

什麼是支持寫一個簡單的C包裝函數調用到你的C++函數。 PInvoke到包裝功能,而這將做到這一點。

0

假設C++ DLL正確地導出了通過引用傳遞的類型,你可以使用一個輕量級的託管C++包裝來調用dll。通過託管C++,您可以直接調用本機C/C++庫和dll,同時仍然從生成的程序集中導出託管接口。其他.Net語言可以像調用任何其他程序集一樣調用受管接口。這是一個額外的開銷,但是可以是最快的方式來完成它。