1

文字セットとして Unicode を設定し、共通言語ランタイムをサポートするために /clr オプションを使用する C++ プロジェクトが 1 つあります。MFC dll の関数を (マルチバイト文字セットを設定して) 呼び出していますが、wchar_t を使用している関数で好みのエラーが発生しています。同じ dll が、/clr オプションが設定されていない (つまり、共通言語ランタイム サポートがない) Unicode C++ プロジェクトの作業ファイルです。私はグーグルをして、次のようなことを試しました:--

  1. 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)

  1. 「Wchar_t を組み込み型として扱う」などの設定を確認したところ、ファイルになっています。
  2. 関数とクラスを使用して明示的にエクスポートしようとしまし__declspec(dllexport)たが、運がありません。
  3. プロジェクトをユニコードからマルチバイトに変更できないか、/clr オプションの設定を変更すると他のエラーが発生し始めます。

解決策を提案してください。前もって感謝します。

4

1 に答える 1

-1

外部DLLで「dumpbin」を実行して、何がエクスポートされるかを確認します。CEventLog :: CEventLogがcharベースのコンストラクターをエクスポートしていない場合、それをインポートすることはできません。そのように単純です。

/ clrスイッチが問題の原因であるとは、例からはわかりません。外部DLLに実際にリンクできることを確認するために、新しいUnicodeプロジェクト(CLRなし)を作成してみてください。

于 2012-09-17T12:12:28.950 に答える