原创 接下來一段時間的工作

前一個項目告一段落,需要總結的東西有很多,接下來一段時間將會分塊具體總結一下。 1.boost庫方面的一些使用心得 2.使用宏靈活的控制代碼 3.c++模版的強大功能 4.字符編碼和國際化的問題 5.json數據格式的使用 6.使用htt

原创 “當前目錄”以及DLL搜索路徑的問題

GetCurrentDirectory這個API用於獲得進程的“當前目錄” GetModuleFileName獲取一個已裝載模板的完整路徑名稱 區別通過一個實驗可以明顯的看出 void CCurrentDirDlg::OnBnClicke

原创 應用程序無法正確啓動,0x00000b

release程序拿給沒有安裝vc環境的機器運行,出現“應用程序無法正確啓動,0x00000b”的問題,經過判斷不是沒有安裝vc環境的原因。 exe程序依賴了A.dll,A.dll在編譯時依賴了b.dll和c.dll,後來用Depends

原创 使用宏靈活的控制代碼

這個系列記錄了前一個項目中的一些心得,《接下來一段時間的工作》列了一個目錄。不過具體記錄時,沒有按照目錄的順序。 第一篇記一下關於宏的一些使用。 有一些(特別是純C++)程序猿,認爲宏在代碼中的作用不大,尤其是使用const XXX代替宏

原创 c++模版的一些使用方法(一)

在一個項目中,我認爲c++模版的主要應用是對一些基礎組件的封裝。因爲基礎組件往往是供上層開發人員使用的,並且它一般具有不確定性和支持的曠闊性,stl的容器是個很好的例子。容器支持n中類型,這表現了它的廣闊性,它又可以通過順序和鏈式實現,這

原创 c++模版的一些使用方法(四)

接着(三)的內容說,設計模式中有一種適配器模式,它的意思是,當兩個接口不匹配時,創建一個適配器在中間進行轉接,使原本不能在一起工作的兩個接口可以在一起工作。這種類型不匹配的情況在普通代碼層也會經常出現,比如函數的參數類型,模版的參數等。那

原创 c++模版的一些使用方法(三)

c++模版的應用是可以分類的。按照用途,可以分爲:   1)工程模版   2)算法和數據結構的解耦   3)工作於編譯期的模版   4)XX的封裝   5)適配器模式 首先解釋一下,這裏的劃分屬於較高層的應用劃分,但這些應用都是基於模版的

原创 一個死鎖的問題

問題是這樣的,如下圖所示: 1.有一個線程模型,其中,MainThread爲主線程,他有一些資源,比如兩個互斥器mutex1,mutex2,下面統稱爲鎖。 2.這個主線程可以創建很多子線程thread1、thread2......thre

原创 虛擬內存,映射,分頁機制

這是我找到的關於虛擬內存和分頁機制的我個人比較容易理解的一篇文章。 虛擬存儲器的思想是程序、數據和堆棧的大小都有可能超過物理內存大小,由操作系統把當前使用的放在內存,而不需要的放在磁盤。          而絕大部分操作系統使用的虛擬

原创 Disable Language Extensions

今天自己編譯jsoncpp的代碼,只提取了jsoncpp-src-0.5.0版本中makefile下的vs7.1解決方案中的lib_json工程,然後在該工程中添加了一個自己的頭文件json.h和源文件json.cpp,用於包裝jsonc

原创 多線程數據同步總結

在線程安全的單間類中提到了InterlockedCompareExchangePointer函數及CAS(Compare and swap)技術,或者成爲Lock Free,及使用系統提供的基於cpu指令的無鎖多線程數據同步技術。這裏打

原创 c++模版的一些使用方法(二)

c++模版的其他技巧: 1.編號生成器 考慮下面的場景,對於int、char、double、bool、float這5種類型,我們希望對他們進行類型編號1-5,並且確保對於每種類型,它的編號不會改變,即每次調用函數獲取該編號時,他都是唯一的

原创 線程安全的單間類

 在網上看到一篇關於將線程安全的單例實現,http://www.haogongju.net/art/1688900。下面是他提到的出自google的源碼: template <typename Ty_> class LazySingle

原创 使用hook 攔截消息

鉤子(Hook),是Windows消息處理機制的一個平臺,用用程序可以在上面設置子程以監視指定窗口的某種消息,而且所監視的窗口可以是其他進程所創建的(我始終認爲用hook去鉤當前自己的進程沒多大意義,去鉤別的進程才比較實在)。當消息到達後

原创 程序Crash調試方式--MAP文件

什麼時候用MAP文件調試 1.調試程序時,我們發現Debug版的exe可以完全正常運行,而Release版卻經常莫名其妙Crash。 2.程序運行時直接崩潰,只顯示一個出錯地址,讓聯繫開發人員。這樣根本找不到程序Crash的位置。 3.但