1

MFC 開発と Visual Studio の両方に慣れようとしているので、Visual Studio 2012 RC をインストールし、単純な MFC アプリケーションを作成しました。現在、アプリケーションは、私のために生成された MFC ウィザードにすぎません。

XML ライブラリを組み込むことにしたので、githubでこれを見つけました。ソース コードを含む ZIP ファイルをダウンロードして解凍し、Visual Studio でソリューション エクスプローラーに移動してソリューションを選択し、右クリックして [追加] > [既存のプロジェクト] を選択します。ソース コードのプロジェクト ファイルを選択すると、ソリューション エクスプローラー ツリーに表示されます。

コードのコンパイルをテストすると、コンパイルされます。ただし、現在のソリューションからどのように使用するかはよくわかりません。

私は自分のドキュメントでこのコードを使用しようとしています:

#include "../../TinyXML2/leethomason-tinyxml2-a3efec0/tinyxml2.h"

<...snip...>

BOOL LoadDocumentFromXML(const CString& filename) {

    CT2CA pszConvertedAnsiString (filename);
    std::string s(pszConvertedAnsiString);

    tinyxml2::XMLDocument doc(true);
    if (tinyxml2::XML_NO_ERROR != doc.LoadFile(s.c_str())) {
        return FALSE;
    }



    return TRUE;
}

ただし、プロジェクトをビルドしようとすると、次のリンカー エラーが発生します。

------ Build started: Project: GraphApp, Configuration: Debug Win32 ------
  GraphAppDoc.cpp
GraphAppDoc.obj : error LNK2019: unresolved external symbol "public: __thiscall tinyxml2::XMLDocument::XMLDocument(bool)" (??0XMLDocument@tinyxml2@@QAE@_N@Z) referenced in function "int __cdecl LoadDocumentFromXML(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const &)" (?LoadDocumentFromXML@@YAHABV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z)
GraphAppDoc.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall tinyxml2::XMLDocument::~XMLDocument(void)" (??1XMLDocument@tinyxml2@@UAE@XZ) referenced in function "int __cdecl LoadDocumentFromXML(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const &)" (?LoadDocumentFromXML@@YAHABV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z)
GraphAppDoc.obj : error LNK2019: unresolved external symbol "public: int __thiscall tinyxml2::XMLDocument::LoadFile(char const *)" (?LoadFile@XMLDocument@tinyxml2@@QAEHPBD@Z) referenced in function "int __cdecl LoadDocumentFromXML(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > const &)" (?LoadDocumentFromXML@@YAHABV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z)
C:\Users\Phill\Documents\Visual Studio 2012\Projects\GraphApp\Debug\GraphApp.exe : fatal error LNK1120: 3 unresolved externals
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========

ソリューション エクスプローラーで MFC アプリケーション プロジェクトを選択し、右クリックして [依存関係] を選択します。MFC アプリが tinyxml プロジェクトに依存するように設定されていることを確認し、「ビルド順序」が正しいことを確認します (tinyxml が最初)。また、「参照...」に行き、そこにもtinyxmlを追加します。プロジェクト プロパティの MFC アプリのインクルード パスにも、tinyxml のデバッグ ディレクトリを追加します。私は何が欠けていますか?

4

1 に答える 1

9

ドキュメントを完全に読んでいないことがわかりました。プロジェクトに添付された XML を読むと、次のように述べられています。

1 つのヘッダーと 1 つの cpp ファイルです。これらをプロジェクトに追加するだけですぐに使用できます。

だから私はこれをしました。次に、いくつかのコンパイラ警告が表示されました。

------ Build started: Project: GraphApp, Configuration: Debug Win32 ------
  tinyxml2.cpp
c:\users\phill\documents\visual studio 2012\projects\graphapp\graphapp\tinyxml2.cpp(24): warning C4627: '#include "tinyxml2.h"': skipped when looking for precompiled header use
          Add directive to 'stdafx.h' or rebuild precompiled header
c:\users\phill\documents\visual studio 2012\projects\graphapp\graphapp\tinyxml2.cpp(26): warning C4627: '#include <cstdio>': skipped when looking for precompiled header use
          Add directive to 'stdafx.h' or rebuild precompiled header
c:\users\phill\documents\visual studio 2012\projects\graphapp\graphapp\tinyxml2.cpp(27): warning C4627: '#include <cstdlib>': skipped when looking for precompiled header use
          Add directive to 'stdafx.h' or rebuild precompiled header
c:\users\phill\documents\visual studio 2012\projects\graphapp\graphapp\tinyxml2.cpp(28): warning C4627: '#include <new>': skipped when looking for precompiled header use
          Add directive to 'stdafx.h' or rebuild precompiled header
c:\users\phill\documents\visual studio 2012\projects\graphapp\graphapp\tinyxml2.cpp(29): warning C4627: '#include <cstddef>': skipped when looking for precompiled header use
          Add directive to 'stdafx.h' or rebuild precompiled header
c:\users\phill\documents\visual studio 2012\projects\graphapp\graphapp\tinyxml2.cpp(1834): fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

そこで、ソリューション エクスプローラーで「tinyxml2.cpp」を選択し、右クリックしてプロパティに移動しました。「C++」の下のプロパティで、「プリコンパイル済みヘッダー」に移動し、次のオプションを変更しました。

Precompiled Header: Use

Precompiled Header: Not using precompiled headers

すると魔法のようにうまくいきました!

于 2012-06-23T21:59:50.487 に答える