1. 程式人生 > >VS2010配置jsoncpp解決編譯出錯問題

VS2010配置jsoncpp解決編譯出錯問題

<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;
}