2011-04-25 87 views
2

我想爲C++應用程序編寫一個插件(DLL),但我想使用C#。這可能嗎?我無法訪問C++代碼,因此我無法修改它。可能爲C++應用程序編寫C#DLL(插件)?

從我收集的內容來看,C++(主機)應用程序只是調用不同的函數。

下面是一個C++樣本插件功能:

無效On_Start(HINSTANCE的hInstance,HWND的HWND,BOOL bLogSet,詮釋nDLLID,字符* szHotKey)

這將如何轉化爲一個C#DLL可以加載從這個C++應用程序?

回答

5

不是直接的,但您可以在C++/CLI中編寫一個墊片,用於導出本地函數,然後將實際實現委託給C#程序集。

請記住,但是,這是可能一個壞主意 - 在CLR可以在給定的進程中運行的只有一個版本,所以如果別人編寫的靶向不同的C++應用程序管理插件CLR的版本比你的插件所做的,那麼將導致致命的運行時錯誤。

+0

太好了,謝謝!有沒有這樣的例子? – SofaKng 2011-04-25 15:53:59

+0

@SofaKng:這正是C++/CLI首先存在的原因,所以任何C++/CLI教程都可能包含類似的東西。 – ildjarn 2011-04-25 15:54:48

+0

從Framework 4.0開始,他們現在支持將多個版本的CLR加載到單個進程中,請參閱In-Process並行或In-Proc SxS條款。據我所知,其中一個用例專門用於插件。 – 2011-04-25 16:12:51

0

This project爲類中的靜態方法創建dll導出。這可能是更清潔的解決方案。

相關問題