我在Delphi中创建了一个能够从dll加载插件的应用程序。 dll导出一个看起来像这样的函数
function GetPlugin: IPluginInterface;
IPluginInterface是一个ActiveX类型库。我想因为我正在使用一个类型库我可以使用C#或任何其他语言从dll导出IPluginInterface,虽然经过一些谷歌搜索我发现这不是这种情况,因为有很多关于托管和非托管的讨论代码和原因为什么不能这样做。所以我的问题是,我是否仍然能够在C#中创建一个将导出上述函数的插件?如果没有,除C ++外,哪些语言能够做到这一点?
答案 0 :(得分: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;