在托管c ++项目中使用wchar_t时未解析的外部符号

时间:2012-09-17 11:29:14

标签: c++ mfc c++-cli wchar-t

我有一个C ++项目,其中Unicode设置为字符集,而/ clr选项用于公共语言运行时支持。我正在调用MFC DLL的一些功能(设置MultiByte字符集),我在使用wchar_t的那些函数上得到了一些喜欢的错误。相同的dll是那些未设置/ clr选项的unicode c ++项目的工作文件(即没有公共语言运行时支持)。我做了谷歌并尝试了一些事情: -

  1. 用std:string替换Cstring,但两者都给出了相同的错误。
  2. std:string的示例: -

      

    错误LNK2001:未解析的外部符号“public:__ thishisall   CEventLog :: CEventLog(wchar_t const *)“(?? 0CEventLog @@ QAE @ PB_W @ Z)

    for 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> >,类   IIT :: DataFeedSvr :: SpeedCache :: HolidayScheduleInfo,结构   IIT :: DataFeedSvr :: SpeedCache :: HolidayScheduleSpeedCacheParam>

         
        

    :: Reload(类Iit :: DataFeedSvr :: SpeedCache :: DoubleKeyCacheInstance>>,类     IIT :: DataFeedSvr :: SpeedCache :: HolidayScheduleInfo,结构     IIT :: DataFeedSvr :: SpeedCache :: HolidayScheduleSpeedCacheParam> &安培;,类     CIITAdoRecordset& enum     IIT :: DataFeedSvr :: SpeedCache :: ERefreshType,类     Iit :: DataFeedSvr :: SpeedCache :: CacheObserver const *)“     (?重载@?$ @缓存加载V'$ @ DoubleKeyCacheInstance JV?$ @ CStringT _WV?$ @ StrTraitMFC_DLL _WV?$ @ ChTraitsCRT @ _W ATL @@@@@ ATL @@ VHolidayScheduleInfo @ SpeedCache @ DataFeedSvr @本品系@@ UHolidayScheduleSpeedCacheParam @ 456 @@ SpeedCache @ DataFeedSvr @本品系@@@ SpeedCache @ DataFeedSvr @本品系@@ QAE_NAAV?$ @ DoubleKeyCacheInstance JV?$ @ CStringT _WV?$ @ StrTraitMFC_DLL _WV?$ @ ChTraitsCRT @ _W ATL @@@@@ ATL @@ VHolidayScheduleInfo @ SpeedCache @ DataFeedSvr @ @@本品系@ UHolidayScheduleSpeedCacheParam 456 @@ @ 234 @@ AAVCIITAdoRecordset @ W4ERefreshType 234 @ PBVCacheObserver @ 234 @@ Z)

      
    1. 我检查了设置,例如“将Wchar_t视为内置类型”,它是文件。
    2. 我尝试使用__declspec(dllexport)显式导出函数和类,但没有运气。
    3. 我无法将项目从unicode更改为多字节,或者无法更改/ clr选项的设置,因为它开始发出其他错误。
    4. 请建议解决方案。提前谢谢。

1 个答案:

答案 0 :(得分:-1)

在外部DLL上执行'dumpbin'以查看导出的内容。如果你的CEventLog :: CEventLog没有导出基于字符的构造函数,你将无法导入它,就像那样简单。

从您的示例中看,/ clr开关没有导致问题。尝试创建一个全新的Unicode项目(没有CLR)只是为了检查你真的可以链接到外部DLL。