1

古いVC6ソリューションをVS2010にアップグレードしようとしています。すべてが正常にコンパイルされますが(VC ++の変更を処理するためにいくつかのコードを変更した後)、リンクを拒否します。6つの静的ライブラリがあります-すべて「共有DLLでMFCを使用する」と「ATLを使用しない」に設定されています-Unicode文字セットと1つのアプリケーション(.EXE)が「標準のWindowsライブラリを使用する」と「ATLを使用しない」に設定されています"(もちろんUnicodeも)。このソリューションは、Visual Studio 2005(SP1)を使用して正常にコンパイル/リンクしますが、リンクはVS2008とVS2010の両方で失敗します。エラーメッセージは主に「CStringT」に関連しています。私が調査したすべてのことから、VS2005でもこれらのCStringTリンクエラーが発生するはずです(つまり、CStringがテンプレートクラスに変更されたとき)が、前述したように、VS2005では正常にリンクします。私はすべてのヒントを試しました&ここや他の場所で推奨されているトリック(つまり、stdafx.hヘッダーにCStringTのテンプレートクラスを明示的にインポートする)ですが、運がありません。誰か新しいアイデアがありますか?参考までに、以下のエラーのサンプルを貼り付けます。ありがとう!

error LNK2001: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ)   

error LNK2001: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ)

error LNK2019: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ) referenced in function __catch$?Init@SomeOtherClass@@QAEHPA_W00000@Z$0

error LNK2001: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ)

error LNK2001: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ)

error LNK2001: unresolved external symbol "public: class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const & __thiscall SomeExceptionClass::GetErrorMessage(void)const " (?GetErrorMessage@SomeExceptionClass@@QBEABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ)

error LNK2001: unresolved external symbol "public: void __thiscall SomeDatabaseClass::ExecDirect(class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const &)" (?ExecDirect@SomeDatabaseClass@@QAEXABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z)

error LNK2001: unresolved external symbol "public: void __thiscall SomeDatabaseClass::ExecDirect(class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const &)" (?ExecDirect@SomeDatabaseClass@@QAEXABV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z)
4

1 に答える 1

0

当たり前!以上がこのソリューションの要約です。奇妙な理由で、VS2008 と VS2010 は、古い VC6 プロジェクトをアップグレードするときに「追加のリンクの依存関係」を処理するという非常に貧弱な仕事をします (VS2005 はそれをうまく処理しているようです)。私が見逃していたのは、VS2010 のリンク オプション (古い VC6 ワークスペース/プロジェクトを読み込んでアップグレードした後) に入り、5 つの静的ライブラリ (lib1.lib、lib2.lib など) を [追加の依存関係] フィールド (リンカー->入力)、[追加のライブラリ ディレクトリ] フィールド (これらの .LIB ファイルが作成される場所) に出力フォルダー [s] を追加します ([リンカー] -> [一般]) -- すべて、実際の .EXE プロジェクトの [プロパティ] の下にあるコース。ブーム、今では魅力のようにリンクしています。これらの CString/template アップグレードの問題 (MSDN の記事などから) の「赤いニシン」に脇道にそれました。)、明らかなことを完全に見逃していました。これが誰かの助けになることを願っています。:)

于 2012-11-14T16:59:36.997 に答える