обертывание приложения MFC Gui в DLL (или что-то еще) для взаимодействия с .NET

звучит как ужасная идея? Да я тоже так думал. Излишне говорить, что им сказали, что я должен это сделать.

Ситуация: старое графическое приложение C++ на основе MFC, которое считывает и обрабатывает большое количество источников данных во внутреннюю структуру данных, прежде чем отображать ее пользователю.

Проблема: мне нужна эта структура данных в .NET, подойдет XML.

Решение:

  1. Создайте функцию в приложении MFC, которая записывает структуру данных в большую строку XML (легко).
  2. dllexport эту функцию (или COM?) (как функцию C++ или C или как?)
  3. Скомпилируйте приложение MFC GUI в dll (как?).
  4. ???
  5. Ссылайтесь на dll из .NET и метод P/Invoke для получения большой прибыли.

Это безумие? Можно ли скомпилировать библиотеку dll из приложения MFC с графическим интерфейсом, не изменяя ее? Это ужасная идея? Каковы мои альтернативы? Я довольно потерян.


person dalyons    schedule 15.04.2009    source источник


Ответы (2)


Я бы работал над извлечением определенного кода бизнес-логики в приложении MFC и вставлял этот материал в DLL, а не пытался обернуть все приложение.

Возможно, вы делаете ложное предположение, что вам потребуется меньше усилий, чтобы обернуть приложение MFC в виде DLL (по сути, удалив весь код графического интерфейса, добавив основную DLL и изменив процесс сборки для создания DLL), чем усилия чтобы изолировать код бизнес-логики и поместить его в новый проект DLL.

Чтобы обернуть графический интерфейс в виде DLL, вам потребуется довольно хорошее понимание зависимостей кода бизнес-логики и того, как он используется графическим интерфейсом, поэтому вы можете просто вырезать этот материал.

person RedBlueThing    schedule 15.04.2009
comment
это то, что я бы сделал, но я не могу, потому что я просто подрядчик, и у них «нет ресурсов», чтобы изменить объем, чтобы включить рефакторинг приложения. - person dalyons; 15.04.2009
comment
Я думаю, что ресурсы для связывания приложения с графическим интерфейсом как DLL и предоставления соответствующей бизнес-логики в качестве экспортируемой функции могут быть эквивалентны простому извлечению этой бизнес-логики и созданию новой DLL. - person RedBlueThing; 15.04.2009
comment
Я согласен с Каннонадой. Я не думаю, что ваш подход сработает (хотя я не эксперт в таких вещах). Но изоляция бизнес-логики всегда является хорошей идеей (не только в этом конкретном случае) и даст вам другие преимущества. - person Javier De Pedro; 15.04.2009

Можете ли вы немного изменить источник MFC? Почему бы не добавить некоторые параметры командной строки, чтобы приложение выдавало XML в стандартный вывод вместо запуска графического интерфейса?

В CWinApp::InitInstance у вас есть доступ к параметрам командной строки путем наследования CCommandLineInfo.

В клиенте .Net запустите процесс и запишите результат.

person Aidan Ryan    schedule 16.04.2009