Я обновляю некоторые устаревшие приложения до 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? Как настроить компоновщик для этого?