我有一个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。

10-04 10:29