文字セットとして Unicode を設定し、共通言語ランタイムをサポートするために /clr オプションを使用する C++ プロジェクトが 1 つあります。MFC dll の関数を (マルチバイト文字セットを設定して) 呼び出していますが、wchar_t を使用している関数で好みのエラーが発生しています。同じ dll が、/clr オプションが設定されていない (つまり、共通言語ランタイム サポートがない) Unicode C++ プロジェクトの作業ファイルです。私はグーグルをして、次のようなことを試しました:--
- Cstring を std:string に置き換えますが、両方とも同じエラーが発生します。
std: string:-- の例
エラー LNK2001: 未解決の外部シンボル "public: __thiscall CEventLog::CEventLog(wchar_t const *)" (??0CEventLog@@QAE@PB_W@Z)
Cstringの場合:--
エラー LNK2019: 未解決の外部シンボル "public: bool __thiscall CIITAdoField::GetValue(class 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(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@@UHolidayScheduleCacheSpeedParam@ 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)
- 「Wchar_t を組み込み型として扱う」などの設定を確認したところ、ファイルになっています。
- 関数とクラスを使用して明示的にエクスポートしようとしまし
__declspec(dllexport)
たが、運がありません。 - プロジェクトをユニコードからマルチバイトに変更できないか、/clr オプションの設定を変更すると他のエラーが発生し始めます。
解決策を提案してください。前もって感謝します。