Можно ли поместить CWinApp в DLL? - PullRequest
1 голос
/ 29 мая 2010

Я обновляю некоторые устаревшие приложения до Visual Studio 10 и нахожусь в адском компоновщике. Все эти DLL получают классы из CWinApp и используют AfxGetApp () для получения доступа к объекту. Когда я связываю библиотеки DLL, я получаю неразрешенные внешние объекты, которые выглядят как глобальные статические объекты, которые могут быть обработаны функцией main () обычного приложения:

Shell.lib(SHELL.obj) : error LNK2001: unresolved external symbol "public: static struct CRuntimeClass const CException::classCException" (?classCException@CException@@2UCRuntimeClass@@B)
Shell.lib(SHELL.obj) : error LNK2001: unresolved external symbol "public: static struct CRuntimeClass const CFrameWnd::classCFrameWnd" (?classCFrameWnd@CFrameWnd@@2UCRuntimeClass@@B)
Shell.lib(SHELL.obj) : error LNK2001: unresolved external symbol "public: static class CRect const CFrameWnd::rectDefault" (?rectDefault@CFrameWnd@@2VCRect@@B)

Моя текущая комбинация игнорируемых библиотек по умолчанию и дополнительных библиотек (метод, который вы можете легко найти в Google, чтобы найти ответ на ад линкера): msvcprtd.lib, mfc100d.lib, mfcs100d.lib, libcmtd.lib

Когда я добавляю nafxcwd.lib (библиотека mfc), эти три внешних символа разрешаются, но в итоге я получаю кучу других дублирующих символов (требующих использования / FORCE: MULTIPLE), и в итоге ___argc и ___argv становятся неразрешенными.

Итак, основной вопрос: можете ли вы связать библиотеку DLL, содержащую CWinApp в VS10? Как настроить компоновщик для этого?

1 Ответ

0 голосов
/ 02 июня 2012

Можете ли вы связать DLL, содержащую CWinApp в VS10?

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

Я искал определения для тех объектов, на которые жалуется ваш компоновщик, и нашел их в afx.h и afxwin.h, в каталоге include Visual Studio, в комплекте с остальной частью кода ATL и MFC, который включен в Visual Studio при установке.

Вы используете экспресс-версию случайно? Одно из немногих различий между Express Edition и Pro Edition Visual Studio 2010 заключается в том, что приложения ATL и MFC не будут компилироваться в Express Edition. Вы должны использовать профессиональную версию.

...