1

我有一个 C++ 项目,其中 Unicode 设置为字符集,/clr 选项用于公共语言运行时支持。我正在调用 MFC dll 的某些函数(设置多字节字符集),并且在使用 wchar_t 的那些函数上遇到了一些喜欢的错误。相同的 dll 是那些未设置 /clr 选项(即没有公共语言运行时支持)的 unicode c++ 项目的工作文件。我已经完成了谷歌并尝试了一些类似的东西: -

  1. 用 std:string 替换 Cstring 但两者都给出相同的错误。

标准示例:字符串:--

错误 LNK2001:未解析的外部符号“公共:__thiscall CEventLog::CEventLog(wchar_t const *)”(??0CEventLog@@QAE@PB_W@Z)

对于 Cstring:--

error LNK2019: unresolved external symbol "public: bool __thiscall CIITAdoField::GetValue(class ATL::CStringT > > &)" (?GetValue@CIITAdoField@@QAE_NAAV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z) referenced in function "public: bool __thiscall Iit::DataFeedSvr::SpeedCache::CacheLoader > >,class Iit::DataFeedSvr::SpeedCache::HolidayScheduleInfo,struct Iit::DataFeedSvr::SpeedCache::HolidayScheduleSpeedCacheParam>

::Reload(class Iit::DataFeedSvr::SpeedCache::DoubleKeyCacheInstance > >,class 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@@UHolidayScheduleSpeedCacheParam@ 456@@SpeedCache@DataFeedSvr@Iit@@@SpeedCache@DataFeedSvr@Iit@@QAE_NAAV?$DoubleKeyCacheInstance@JV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@VHolidayScheduleInfo @SpeedCache@DataFeedSvr@Iit@@UHolidayScheduleSpeedCacheParam@456@@234@AAVCIITAdoRecordset@@W4ERefreshType@234@PBVCacheObserver@234@@Z)

  1. 我已经检查了“将 Wchar_t 视为内置类型”之类的设置,它是文件。
  2. 我曾尝试使用显式导出函数和类,__declspec(dllexport)但没有运气。
  3. 我无法将我的项目从 unicode 更改为多字节,或者无法更改 /clr 选项的设置,因为它开始出现其他错误。

请提出解决方案。提前致谢。

4

1 回答 1

-1

对外部 DLL 执行“转储”以查看导出的内容。如果您的 CEventLog::CEventLog 没有导出基于 char 的构造函数,您将无法导入它,就这么简单。

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

于 2012-09-17T12:12:28.950 回答