【发布时间】:2012-10-09 18:18:25
【问题描述】:
我的主要应用程序是 C#,并引用另一个声明 IPlugin 和 IPluginHost 的 .NET DLL。我现在需要将此 DLL 导入到 Delphi 项目中,以便为主应用程序制作插件。我听说这是可能的,但是关于导入类(我不想要)或在 .NET 中运行 Delphi 代码的事情太多了
有没有人做过这件事,谁能澄清一下?
【问题讨论】:
我的主要应用程序是 C#,并引用另一个声明 IPlugin 和 IPluginHost 的 .NET DLL。我现在需要将此 DLL 导入到 Delphi 项目中,以便为主应用程序制作插件。我听说这是可能的,但是关于导入类(我不想要)或在 .NET 中运行 Delphi 代码的事情太多了
有没有人做过这件事,谁能澄清一下?
【问题讨论】:
直接在 Delphi 中实现 .NET 接口将非常困难(我什至不确定是否可能)。但是,根据您想要把手弄脏的程度,您可以使用一些选项。
1) 您可以在 Delphi 中创建一个 ActiveX DLL,然后将该库导入 .NET。然后,您可以在 C# 中创建一个实现该接口的代理类,并将调用路由到 Delphi ActiveX DLL。
2) 您可以在 Delphi 中创建本机 Windows DLL,然后在 .NET 中编写接口。然后,您可以在 C# 中创建一个实现该接口的代理类,并将调用路由到 Delphi DLL。
3) 您可以使用支持 .NET 和 Delphi 的插件框架,例如 Hydra (http://www.remobjects.com/hydra/)。
在所有这些情况下,您应该小心处理 32/64 位情况,因为 .NET 代码能够在这两种情况下运行,但 Delphi 代码需要为每个环境独立编译。
根据您的情况,另一种选择可能是以对象 pascal 的形式编写 Delphi 代码,该代码将生成称为 Oxygene (http://www.remobjects.com/oxygene/) 的 .NET 字节代码。
编辑:如果您尝试创建用于 .NET 插件框架的 Delphi 插件,最好这样做:
在 Delphi 中创建一个与您的 IPlugIn 和 IPlugInHost 接口匹配的新接口。然后,您可以构建一个 .NET Delphi 插件包装器,其中包含一些配置信息来指定要加载的 Delphi 插件。然后,这个 .NET 包装器将加载 Delphi DLL 并根据需要调用 DLL 方法。视觉的东西需要某种 ActiveX 包装器,但你应该能够很好地使用非视觉的东西。
【讨论】:
最简单的方法是为delphi 提供一个.NET to COM wrapper dll。我发现这是迄今为止与 .NET 交互最轻松的方式。
【讨论】: