Я создаю приложение C++, которое использует QT для создания GUI. Однако я должен пользоваться сторонней библиотекой, которая полагается на MFC (для CString's, и т.д.). Там должен так или иначе добавить MFC к моему приложению, чтобы позволить мне пользоваться этой библиотекой, или я должен переписать его сам?
Я видел этот вопрос, но он не говорит мне, как добавить MFC вручную к проекту.
Если приложение библиотеки берет/возвращает/использует CStrings, то ему понадобится линковка с библиотеками MFC, или же библиотеки MFC будут уже статически линковкированы.
Если вы используете Visual Studio, вы можете просто проверить "использовать MFc в статических/совместных lib", это не повлияет на графический интерфейс вашего приложения, если вы сохраните вашу текущую точку входа в программу.
]Да, вы можете использовать MFC, выбрав его в опциях компиляции и компоновки. Если ваша единственная причина - сторонняя библиотека, то вы, вероятно, захотите воздержаться от использования каких-либо функций MFC в своем коде. Таким образом, если Вы когда-нибудь замените стороннюю библиотеку, то можете отключить и MFC.[
].Если это только для CString (и, возможно, для некоторых других функций утилиты), то, возможно, вам лучше искать замены. В интернете довольно много плавающих функций.
Например, эта реализация CString
.Было бы намного проще, если бы вы могли найти замену сторонней библиотеке MFC.
Для сторонней библиотеки, статической или динамически подключаемой, потребуется версия MFC, точно такая же, как та, которая использовалась для компиляции стороннего файла lib. Классы MFC не совместимы на двоичном уровне между версиями и даже не совместимы на двоичном уровне между конфигурациями (статический / динамически связанный MFC и CRT, однопоточный / многопоточный CRT, отладка, выпуск, X86, X64, MBCS, UNICODE и т. .
Если вы используете CString :: LoadString или что-нибудь еще, имеющее доступ к состоянию модуля MFC, ему потребуется глобальный CWinApp. Легкий способ получить это - создать обычную DLL. Чтобы добавить его в проект QT, вам потребуется переместить код из функции выхода из функции входа в InitInstance и ExitInstance.
Если существующая программа Windows использует цикл сообщений (вместо отдельных обработчиков событий, используемых MFC), вы можете создать подкласс окна на любом уровне, необходимом для обработки этого цикла сообщений, и переопределить функцию WindowProc. .
Например, я взял существующую программу Win32 и встроил ее главное окно в окно изображения CStatic, заменив WindowProc подкласса CStatic. Функциональность предыдущей программы содержалась в CStatic, но я мог добавить другие элементы управления и парадигмы MFC в окружающую границу.