5

XERCES 関数を 2.6 から 2.8 にアップグレードしているときに、リンカー エラーに直面しています。

unresolved external symbol (?resolveEntity@HandlerBase@xercesc_2_8@@UAEPAVInputSource@2@QBG0@Z)

xerces-c_2.8.lib を確認したところ、名前 lib が私の .obj ファイルのものと少し異なることがわかりました。

?resolveEntity@HandlerBase@xercesc_2_8@@UAEPAVInputSource@2@QB_W0@Z

したがって、リンカが一致を見つけずにエラーをスローすることを理解しています。

しかし、.obj ファイルに異なる署名が含まれている理由を理解できません。

コードには、正しいヘッダー ファイルと、まだ正しくない名前の lib が含まれています。

どんな助けでも大歓迎です。

4

2 に答える 2

14

undname.exe ユーティリティを使用して、元の C++ 宣言を復元できます。

?resolveEntity@HandlerBase@xercesc_2_8@@UEPAVInputSource@2@QBG0@Z は次のように変換されます。

virtual class xercesc_2_8::InputSource * 
__thiscall xercesc_2_8::HandlerBase::resolveEntity(
    unsigned short const * const,
    unsigned short const * const)

?resolveEntity@HandlerBase@xercesc_2_8@@UEPAVInputSource@2@QB_W0@Z は次のように変換されます。

virtual class xercesc_2_8::InputSource * 
__thiscall xercesc_2_8::HandlerBase::resolveEntity(
     wchar_t const * const,
     wchar_t const * const)

引数の型unsigned shortvsの違いに注意してくださいwchar_t。何らかの理由で、コンパイラが wchar_t 型を認識していません。これは、非常に古いコンパイラを使用していることが原因である可能性があります。または、オプション セットが間違っている可能性があります。msvc では、C/C++、言語、「wchar_t を組み込み型として扱う」です。または、文字列型を unsigned short にハックするマクロがあります。

于 2012-09-28T13:07:30.857 に答える
0

C++ では関数のオーバーロードが許可されているため、関数へのパラメーターは名前マングリングに記録されます。DLL が期待するものとは異なるパラメーターの型で関数を呼び出そうとしている可能性があります。

ヘッダー ファイルが DLL のバージョンと一致していることを確認してください。

于 2012-09-28T13:12:13.953 に答える