Компонент .NET ActiveX с содержимым WPF не может быть загружен приложением без MFC - PullRequest
0 голосов
/ 14 апреля 2010

У меня есть устаревшая программа delphi, и я хочу добавить контент, реализованный в WPF. Поэтому я инкапсулирую элемент управления WPF с помощью технологии взаимодействия .NET / ActiveX. Это означает что-то вроде: [ComRegisterFunction()] public static void RegisterClass(string key); [ComUnregisterFunction()] public static void UnregisterClass(string key);

Компонент activeX является пользовательским элементом управления WinForms, а материалы WPF прикреплены к ElemenHost в этом пользовательском элементе управления.

Работает нормально, если хост-приложение этого ActiveX - это программа MFC, даже без ключа / clr. Но мое старое приложение - это программа delphi, и она всегда выдает исключение stackoverflow в первой строке конструктора моего пользовательского элемента управления WPF при запуске программы.

сообщение показывает исключение: An unhandled exception of type 'System.StackOverflowException' occurred in PresentationFramework.dll

Понятия не имею, Google не поможет. и это озадачило меня на несколько дней.

1 Ответ

0 голосов
/ 15 апреля 2010

Вау! Delphi -> ActiveX -> WinForms -> WPF. Я был бы удивлен, если бы это действительно сработало.

Я бы предложил полностью исключить WinForms и ActiveX из картинки:

На стороне WPF просто:

  • Использование HwndSource в качестве источника презентаций
  • Создать класс, который предоставляет функцию «CreateWindow», которая переносит IntPtr в родительское окно
  • Применить [ComVisible] к классу

На стороне Delphi просто:

  • Построить родительское окно
  • Создание класса WPF с использованием COM
  • Вызовите «CreateWindow» для создания содержимого WPF
  • Установите другие свойства, необходимые для управления контентом WPF и связи с ним

Если вы действительно хотите попытаться сделать вложение Delphi -> ActiveX -> WinForms -> WPF, я начну с трассировки стека во время переполнения стека. Это должно подсказать вам, что идет не так, и исправить это.

...