1

我们想从 .NET 打开一些 Delphi (win32) 表单并将 Delphi 表单嵌入到 .NET MDI 表单中。如果我们只是在我们的 Delphi DLL 中调用导出的方法,那么嵌入表单是没有问题的,但是我们通常会遇到快捷键和键盘事件的问题。我们认为这是因为不兼容的消息循环。然后,我们尝试在单独的 .NET 线程上的 Delphi DLL 中的导出过程中执行 Application.Run,​​它第一次工作,但当我们尝试多次打开表单时失败。有谁知道如何按照我们想要的方式进行互操作:在 .NET Winform 中嵌入一个 win32 Delphi 表单?

@All:首先,感谢您的回复我们找到了解决问题的方法:我们将 Delphi Application.Run 移动到启动窗口的导出过程中。

4

2 回答 2

2

如果您有源代码,可以尝试将其移植到生成 .NET 代码的 Delphi Prism。虽然,如果您使用的是 VCL,那么您将面临一场艰苦的战斗。Delphi 2006 有一个 VCL 的 .NET 实现,而 Prism 只是用于 .NET 的 Object Pascal,没有 VCL 适配器。

另一个可用的工具是Hydra,我没有亲自使用过,但他们声称提供 .NET 和“旧版”Delphi 之间的互操作。如果它像他们声称的那样工作,那么将旧的 Delphi 代码转换为 .NET 应用程序可能是最好的选择。

于 2012-02-10T15:06:59.543 回答
0

我可能会在一个单独的进程中运行 Delphi 应用程序,将 Delphi 窗口的父窗口设置为您的 MDI 容器(而不是默认值:桌面,由 HWND 0 引用),并使用典型的跨进程在进程之间编组任何必要的数据。处理消息传递。

再说一次,这本质上与将表单公开为 ActiveX 对象相同。我只是喜欢采用谷歌浏览器的方法并将窗口/选项卡隔离到单独的进程中。

于 2012-02-10T13:43:22.163 回答