非MFC应用程序无法加载具有WPF内容的.NET ActiveX组件

时间:2010-04-14 01:48:26

标签: .net wpf interop activex

我有一个遗留的delphi程序,想要添加一些用WPF实现的内容。因此,我使用.NET / ActiveX互操作技术封装了WPF控件。这意味着: [ComRegisterFunction()] public static void RegisterClass(string key); [ComUnregisterFunction()] public static void UnregisterClass(string key);

activeX组件是一个WinForms用户控件,WPF材料附加到此用户控件中的ElemenHost。

如果此ActiveX的主机应用程序即使没有/ clr开关也是MFC程序,它可以正常工作。但是我的遗留应用程序是一个delphi程序,它总是在程序启动时在我的WPF用户控件的构造函数的第一行引发stackoverflow异常。

异常显示的消息是: An unhandled exception of type 'System.StackOverflowException' occurred in PresentationFramework.dll

我不知道,谷歌没有帮助。这让我困惑了好几天。

1 个答案:

答案 0 :(得分:0)

哇!德尔福 - > ActiveX - > WinForms - > WPF。如果它确实有效,我会感到惊讶。

我的建议是完全放弃WinForms和ActiveX:

在WPF方面:

  • 使用HwndSource作为PresentationSource
  • 创建一个公开“CreateWindow”函数的类,该函数将IntPtr带到父窗口
  • 将[ComVisible]应用于班级

在Delphi方面:

  • 构建父窗口
  • 使用COM
  • 创建WPF类
  • 调用“CreateWindow”以创建WPF内容
  • 根据需要设置其他属性以控制和与WPF内容通信

如果你真的想尝试制作Delphi - > ActiveX - > WinForms - > WPF嵌套工作,我将首先在堆栈溢出时获取堆栈跟踪。这应该可以解决出错的问题并解决它。