Перенос собственного кода MFC для использования в управляемом коде

#.net #dll #mfc #unmanaged #managed

#.net #dll #mfc #неуправляемый #управляемый

Вопрос:

У меня есть старый код MFC, который я хотел бы вызвать из моего управляемого C # WPF .Сетевое приложение. Для переноса собственного кода я обнаружил, что у меня есть варианты либо использовать 1) P / Invoke, 2) C / CLI, либо 3) COM.

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

В моем приложении у меня есть классы, которые являются производными от базовых классов MFC. Я использую архитектуру представления документа, и мои классы Doc, View , MainFrame, App являются производными от классов MFC. Означает ли это, что у меня нет другого выбора, кроме как создать DLL с расширением MFC, и что нет способа использовать эту DLL в моем управляемом приложении. Есть предложения, как обойти эту проблему?

Комментарии:

1. Я рассматриваю возможность переписывания собственного кода без MFC. Поможет ли это? Я хочу иметь возможность скомпилировать его в dll и вызвать эту dll из моего C #. Сетевое приложение.

2. Pinvoke вряд ли будет полезен, он не может вызывать методы C . COM, как правило, отключен от глубокого конца, поскольку ваш существующий код не может быть вызван. Что оставляет C / CLI, обычно лучший выбор. Применяется вся обычная шумиха MFC о библиотеках DLL расширений, без разницы.

3. @HansPassant, но разве библиотеки DLL с расширением MFC не являются непригодными для использования при ссылках из управляемого кода? Я пытаюсь определить, нужно ли мне избавиться от части MFC в моем собственном коде и переписать его как приложение Windows с использованием WinAPI

4. C / CLI может вызывать любой собственный код C . Не имеет значения, что он использует MFC framework.

Ответ №1:

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