2013-02-24 49 views
2

我已經在Delphi中創建了一個應用程序,可以從DLL中加載插件。該dll導出一個看起來像這樣的功能從Dll導出界面。 C#Delphi VB C++等

function GetPlugin: IPluginInterface; 

IPluginInterface是一個ActiveX類型庫。我想,因爲我使用的類型庫,我可以使用C#或任何其他語言來從DLL導出IPluginInterface,雖然經過一些谷歌搜索,我發現這不是這種情況,因爲有很多談論託管和非託管代碼和爲什麼無法完成的原因。所以我的問題是,我仍然可以在C#中創建一個插件來導出類似上面的函數?如果不是,除了C++之外,哪些語言能夠做到這一點?

回答

5

所以我的問題是,我仍然能夠在C#中創建一個插件來導出像上面這樣的函數嗎?如果不是,除了C++之外,哪些語言能夠做到這一點?

Windows上的所有主流編程環境都可以生成和使用COM接口。 C,C++,C#,VB6,VB.net,Delphi等。所以,是的,你可以爲你的任務使用COM接口。

作爲一個細節點,你不能做的就是將一個接口從Delphi DLL中傳遞出來,作爲函數的返回值。那是因爲Delphi uses non-standard semantics for function return values。相反,您需要通過out參數返回它。

所以,你需要寫你的GetPlugin這樣的:

procedure GetPlugin(out Plugin: IPluginInterface); stdcall; 
+0

非常感謝。我去做。如果我在C#中創建插件,我將如何導出「procedure GetPlugin(out Plugin:IPluginInterface); stdcall;」從C#的DLL? – 2013-02-24 14:04:10

+0

有幾種不同的方法。你可以在C#中實現一個COM服務器。或者您可以使用Robert Giesecke的[Unmanaged Exports](https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports)。 – 2013-02-24 14:07:01

+0

非常感謝,我會看看Unmanaged Exports。 – 2013-02-24 14:16:07