2013-11-29 37 views
0

即使搜索了一段時間後,我仍無法找到明確的答案。這似乎是一個不常見的問題:創建一個本機和託管應用程序可以使用的DLL

我有一個本地實現,應該在DLL中。該DLL應該可供本機應用程序以及託管應用程序使用。

所以,如果我在C++/CLI寫這個DLL我可能使兩件事情:

  1. 的,可以通過本機應用程序使用功能的平板,C風格的出口接口。
  2. 託管類可以從任何管理應用(例如C#)通過引用該DLL

將這項工作中使用?純粹的本地應用程序能夠加載這個DLL並調用暴露的函數嗎?

+1

是的,這就是爲什麼C++/CLI中存在的原因之一 - 它不是在所有的「罕見」,我們做這一切的時候。 [MSDN對此主題非常清楚](http://msdn.microsoft.com/en-us/library/x0w2664k.aspx) –

+1

可以從本機代碼和託管代碼調用COM組件;那是另一種選擇。 – MSalters

+0

事實證明,這似乎並不奏效。我必須用/ MT開關來編譯我的DLL(也許是因爲我鏈接的一個Lib)。但後來我無法用/ clr編譯(/ MT和/ clr不能一起工作,連接器說)...呃! – Boris

回答

0

本地DLL像常規本機DLL(no/clr)一樣編譯。 調用C++/CLI應用程序/ DLL使用C++類通過LoadLibrary和GetProcAdress加載DLL。 您需要具有上述C++類映射本機DLL的所有功能。 的C++類充當代理類:

實施例:

機DLL哈薩功能foo()

C++/CLI代碼暴露了一個foo方法,它看起來像:

void MyProxy::foo() { 
    m_foo(); // m_foo is a function pointer to foo() in the DLL obtained via GetProcAddress. 
} 
相關問題