VS2010配置jsoncpp解決編譯出錯問題
阿新 • • 發佈:2019-02-16
<span style="font-family:Microsoft YaHei;font-size:18px;">本人在最近的專案中使用到了jsoncpp來讀取配置檔案。經過多次實踐終於vs2010中配置成功並能成功使用。下面介紹相關步驟。</span>
獲取jsoncpp
編譯
解壓下載的壓縮檔案。在makefiles資料夾下面有兩個工程資料夾:vs71,msvc2010。推薦使用後者進行編譯。
進入msvc2010資料夾,開啟解決方案並編譯。可以看到生成lib_json.lib檔案。這就是我們要使用的庫檔案。這裡有一點需要注意:
專案屬性-->配置屬性-->C/C++-->程式碼生成-->執行庫,記住這裡的值。
配置
這裡我們要新建個工程。然後將工程屬性按上面的值進行配置。配置完成後,將解壓後的檔案裡面include\json這個資料夾拷貝到工程目錄下,同時將前面生成的lib_json.lib拷貝到工程目錄下。然後將include\json這個資料夾裡面的標頭檔案新增到工程。同時 #pragma comment(lib,"lib_json.lib") 引入庫。最後記得在專案屬性-->配置屬性-->
連結器-->輸入-->附加依賴項中新增該lib。此時已經配置完成。
注意:該配置適用於vs2010,在vs2012中配置失敗。
EG
一下demo為讀取檔案內容,檔名為1.txt.內容為:"list":
[
{"name":"1"},
{"name":"2"},
{"name":"3"},
]
}
#include <vector> #include <fstream> #include <cassert> #include "json/json.h" #pragma comment(lib,"lib_json.lib") struct WHITE_LIST_ITEM { TCHAR chExeName[MAX_PATH]; }; std::vector<WHITE_LIST_ITEM> m_vec; BOOL GetFileContent() { Json::Value root; Json::Reader r; std::ifstream f; f.open(L"1.txt"); r.parse(f, root); Json::Value arr = root["list"]; WHITE_LIST_ITEM item= {}; for(int i=0; i<arr.size(); i++) { std::string str = arr[i]["name"].asString(); OutputDebugStringA(str.c_str()); MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), item.chExeName, MAX_PATH); m_vec.push_back(item); memset(item.chExeName, 0, MAX_PATH * sizeof(TCHAR)); } return TRUE; } int _tmain(int argc, _TCHAR* argv[]) {<span style="white-space: pre;"> </span>
<span style="white-space:pre"> </span>std::vector<WHITE_LIST_ITEM>::iterator it = m_vec.begin();
<span style="white-space:pre"> </span>for (; it != m_vec.end(); ++it)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>wprintf(it->chExeName);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return 0;
}