我有一个C ++项目,其中Unicode设置为字符集,并提供/ clr选项以支持公共语言运行时。我正在调用MFC dll的某些功能(通过设置MultiByte字符集),并且在使用wchar_t的那些功能上遇到了一些喜欢的错误。对于未设置/ clr选项的unicode c ++项目,同一个dll是工作文件(即,没有公共语言运行时支持)。我已经完成了google,并尝试了以下方法:-
将Cstring替换为std:string,但是两者都给出相同的错误。
std示例:字符串:-
错误LNK2001:无法解析的外部符号“ public:__thiscall
CEventLog :: CEventLog(wchar_t const *)“(?? 0CEventLog @@ QAE @ PB_W @ Z)
对于Cstring:-
错误LNK2019:无法解析的外部符号“ public:bool __thiscall
CIITAdoField :: GetValue(ATL :: CStringT>>&)“
(?GetValue @ CIITAdoField @@ QAE_NAAV?$ CStringT @ _WV?$ StrTraitMFC_DLL @ _WV?$ ChTraitsCRT @ _W @ ATL @@@@@ ATL @@@ Z)
在函数“ public:bool __thiscall”中引用
Iit :: DataFeedSvr :: SpeedCache :: CacheLoader>>,class
Iit :: DataFeedSvr :: SpeedCache :: HolidayScheduleInfo,struct
Iit :: DataFeedSvr :: SpeedCache :: HolidayScheduleSpeedCacheParam>
:: Reload(类Iit :: DataFeedSvr :: SpeedCache :: DoubleKeyCacheInstance>>,类
Iit :: DataFeedSvr :: SpeedCache :: HolidayScheduleInfo,struct
Iit :: DataFeedSvr :: SpeedCache :: HolidayScheduleSpeedCacheParam>&,class
CIITAdoRecordset&,enum
Iit :: DataFeedSvr :: SpeedCache :: ERefreshType,class
Iit :: DataFeedSvr :: SpeedCache :: CacheObserver const *)“
(?Reload @?$ CacheLoader @ V?$ DoubleKeyCacheInstance @ JV?$ CStringT @ _WV?$ StrTraitMFC_DLL @ _WV?$ ChTraitsCRT @ _W @ ATL @@@@@@ ATL @@ VHolidayScheduleInfo @ SpeedCache @ DataFeedSvr @ Iit @@ UHolidaydaySchedule 456 @@ SpeedCache @ DataFeedSvr @ Iit @@@@ SpeedCache @ DataFeedSvr @ Iit @@ QAE_NAAV?$ DoubleKeyCacheInstance @ JV?$ CStringT @ _WV?$ StrTraitMFC_DLL @ _WV?$ ChTraitsCRT @ _W @ ATL @@@@@@ ATL @@ VHoliday @ SpeedCache @ DataFeedSvr @ Iit @@ UHolidayScheduleSpeedCacheParam @ 456 @@ 234 @ AAVCIITAdoRecordset @@ W4ERefreshType @ 234 @ PBVCacheObserver @ 234 @@ Z)
我检查了“将Wchar_t处理为内置类型”这样的设置,它是文件。
我试图使用__declspec(dllexport)
显式导出函数和类,但是没有运气。
我无法将项目从unicode更改为多字节,或者无法更改/ clr选项的设置,因为它开始出现其他错误。
请提出解决方案。提前致谢。
最佳答案
在外部DLL上执行“转储”以查看导出的内容。如果您的CEventLog :: CEventLog没有导出基于char的构造函数,您将无法导入它,就这么简单。
从您的示例中看不出/ clr开关是引起此问题的原因。尝试创建一个全新的Unicode项目(不包括CLR)只是为了检查您是否确实可以链接到外部DLL。