У меня есть один проект C ++ с настройками Unicode в качестве набора символов и опцией / clr для поддержки общеязыковой среды выполнения. Я вызываю какую-то функцию из MFC dll (с настройкой набора символов MultiByte) и получаю некоторую симпатичную ошибку для тех функций, которые используют wchar_t. Этот же DLL-файл является рабочим файлом для тех проектов Unicode C ++, в которых не задана опция / clr (т.е. не поддерживается общеязыковая среда выполнения). Я сделал Google и попробовал что-то вроде: —
Пример для std: string: —
ошибка LNK2001: неразрешенный внешний символ «public: __thiscall
CEventLog :: CEventLog (wchar_t const *) «(?? 0CEventLog @@ QAE @ PB_W @ Z)
для Cstring: —
ошибка LNK2019: неразрешенный внешний символ «public: bool __thiscall»
CIITAdoField :: GetValue (класс ATL :: CStringT>> &) «(? ПолучитьЗначение @ CIITAdoField @@ QAE_NAAV? $ CStringT @ _WV? $ StrTraitMFC_DLL @ _WV? $ ChTraitsCRT @ _W @ ATL @@@@@ АТЛ @@@ Z)
упоминается в функции «public: bool __thiscall»
Iit :: DataFeedSvr :: SpeedCache :: CacheLoader>>, класс
Iit :: DataFeedSvr :: SpeedCache :: HolidayScheduleInfo, структура
Iit :: DataFeedSvr :: SpeedCache :: HolidayScheduleSpeedCacheParam>:: Reload (класс Iit :: DataFeedSvr :: SpeedCache :: DoubleKeyCacheInstance>>, класс
Iit :: DataFeedSvr :: SpeedCache :: HolidayScheduleInfo, структура
Iit :: DataFeedSvr :: SpeedCache :: HolidayScheduleSpeedCacheParam> &,учебный класс
CIITAdoRecordset &, перечисление
Iit :: DataFeedSvr :: SpeedCache :: ERefreshType, класс
Iit :: DataFeedSvr :: SpeedCache :: CacheObserver const *) «(? Reload @? $ CacheLoader @ V? $ DoubleKeyCacheInstance @ JV? $ CStringT @ _WV? $ StrTraitMFC_DLL @ _WV? $ ChTraitsCRT @ _W @ ATL @@@@@ АТЛ @@ VHolidayScheduleInfo @ SpeedCache @ DataFeedSvr @ Iit @@ UHolidayScheduleSpeedCacheParam @ 456 @@ SpeedCache @ DataFeedSvr @ Iit @@@ SpeedCache @ DataFeedSvr @ Iit @@ QAE_NAAV? $ DoubleKeyCacheInstance @ СП? $ CStringT @ _WV? $ StrTraitMFC_DLL @ _WV? $ ChTraitsCRT @ _W @ АТЛ @@@@@ АТЛ @@ VHolidayScheduleInfo @ SpeedCache @ DataFeedSvr @ Iit @@ UHolidayScheduleSpeedCacheParam @ 456 @@ 234 @ AAVCIITAdoRecordset @@ W4ERefreshType @ 234 @ PBVCacheObserver @ 234 @@ Z)
__declspec(dllexport)
но не повезло.Пожалуйста, предложите решение. Заранее спасибо.
Сделайте ‘мусорную корзину’ на внешней DLL, чтобы увидеть, что экспортируется. Если ваш CEventLog :: CEventLog не экспортирует конструктор на основе символов, вы не сможете его импортировать, просто так.
Из вашего примера не видно, что ключ / clr вызывает проблему. Попробуйте создать новый проект Unicode (без CLR), чтобы убедиться, что вы действительно можете ссылаться на внешнюю DLL.
Других решений пока нет …