C# 如何在.NET Winform中嵌入win32 Delphi表单

C# 如何在.NET Winform中嵌入win32 Delphi表单,c#,.net,winforms,delphi,winforms-interop,C#,.net,Winforms,Delphi,Winforms Interop,我们想从.NET中打开一些Delphi(win32)表单,并将Delphi表单嵌入到.NETMDI表单中。 如果我们只是在Delphi DLL中调用导出的方法,那么嵌入表单是没有问题的,但是通常我们会遇到快捷键和键盘事件的问题。我们认为这是因为不兼容的消息循环。 然后,我们尝试执行一个应用程序。在单独的.NET线程上,在Delphi DLL的导出过程中运行,它第一次工作,但在尝试多次打开表单时失败。 有人知道如何以我们希望的方式进行互操作吗:在.NET Winform中嵌入win32 Delph

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

@所有人:首先,感谢您的回复
我们找到了问题的解决方案:我们移动了Delphi应用程序。运行到启动windows的导出过程中

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


同样,这与将窗体作为ActiveX对象公开基本相同。我只是想采用Google Chrome的方法,将窗口/选项卡分离成不同的进程。

如果你有源代码,你可以尝试将其移植到Delphi Prism,它会生成.NET代码。尽管如此,如果你使用VCL,你将面临一场艰难的战斗。Delphi2006有一个VCL的.NET实现,而Prism只是.NET的对象Pascal,并没有VCL适配器


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

将表单作为activex公开可以完成此任务activex方法意味着您的Delphi应用程序是.NET表单中的控件,.NET表单将执行表单级热键窗口消息处理,这应该比重新租给.net窗口的Delphi窗口好得多。嘿,只是因为这是一个令人头痛的问题,不是吗?这不是完全可行的。这不是个坏主意。但我怀疑这会神奇地让他们所有的热键和键盘快捷键正常工作。例如,嵌入式进程如何共享或转发正确属于父应用程序的键盘快捷键?@zenexer对mePrism来说相当棘手,这几乎和用C#重写它一样困难。但是Hydra确实提供了一些互操作,可能真的会有帮助+海德拉1号。