2013-02-24 52 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