Time of Update: 2018-12-05
這兩個函數是MFC的基類CWnd兩個很重要的虛函數,萬惡的MFC總是讓人很煩惱。class CWnd : public CCmdTarget{ public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual void PreSubclassWindow(); BOOL SubclassWindow(HWND hWnd); }; 父類中的虛擬函數是可以被子類重新實現的,以實現多態
Time of Update: 2018-12-05
開源日誌系統 - log4cplus (六) 收藏### 一些可以改進之處 ###1. 使用者自訂LogLevel的實現機制不夠開放在第五篇中曾經介紹過如何?使用者自行定義LogLevel,為了實現比較理想的效果,甚至還需要改log4cplus的原始碼。:(2.
Time of Update: 2018-12-05
在看c專家編程。收穫還是有的,雖然c代碼寫的不多,(工作之中主要面對的是c++),但是個人感覺c對於c++的理解還是很有協助的。 多看c的書我想還是很有好處的。 另外打算看 advanced windows debugging。直接啃英文版的了,英文版看起來比較慢,主要很擔心翻譯的問題。國內的譯者水準我個人不是很信服。 最近工作中用到的調試比較多,有時間會學習和寫一些調試方面的文章。
Time of Update: 2018-12-05
### 如何將log記錄到檔案 ###我們在例5中給出了一個將log記錄到檔案的例子,用的是FileAppender類實現的,log4cplus提供了三個類用於檔案操作,它們是FileAppender類、RollingFileAppender類、DailyRollingFileAppender類。1. FileAppender類實現了基本的檔案操作功能,建構函式如下:FileAppender(const log4cplus::tstring& filename,
Time of Update: 2018-12-05
如何控制輸出訊息的格式前面已經講過,log4cplus通過布局器(Layouts)來控制輸出的格式,log4cplus提供了三種類型的Layouts,分別是SimpleLayout、PatternLayout、和TTCCLayout。1. SimpleLayout是一種簡單格式的布局器,在輸出的原始資訊之前加上LogLevel和一個"-"。比如以下程式碼片段: /* step 1: Instantiate an appender object */
Time of Update: 2018-12-05
基本用法:使用log4cplus有六個基本步驟:1. 執行個體化一個appender對象2. 執行個體化一個layout對象3. 將layout對象綁定(attach)到appender對象4. 執行個體化一個logger對象,調用靜態函數:log4cplus::Logger::getInstance("logger_name"5. 將appender對象綁定(attach)到logger對象,如省略此步驟,標準輸出(螢幕)appender對象會綁定到logger6.
Time of Update: 2018-12-05
對於任何一個軟體開發人員來說,架構師都是一個令人嚮往的角色。就連世界首富比爾蓋茨在2000年卸任公司CEO的同時,也擔任了微軟公司的榮譽角色“首席軟體架構師”,可見“架構師”這一稱謂的吸引力。架構師是公司的“金領”,有著非常高的收入,很少需要考慮生存的問題,從而有更多的精力思考關鍵技術問題,形成“強者愈強”的良性迴圈。部分優秀的開發人員在工作了一定時間後,就要開始考慮自己的未來到底向哪個方向發展。如果開發人員的溝通能力強過技術能力,在補充一定的專案管理知識後,可以向技術管理的方向轉型。如果其對技
Time of Update: 2018-12-05
### 簡介 ###log4cplus是C++編寫的開源的日誌系統,前身是java編寫的log4j系統.受Apache Software License保護。作者是Tad E. Smith。log4cplus具有安全執行緒、靈活、以及多粒度控制的特點,通過將資訊劃分優先順序使其可以面向程式調試、運行、測試、和維護等全生命週期; 你可以選擇將資訊輸出到螢幕、檔案、NT event log、甚至是遠程伺服器;通過指定策略對日誌進行定期備份等等。 ### 下載
Time of Update: 2018-12-05
在網路編程裡,網路位元組序是big-endian的,而大部分的PC的系統都是X86處理器系列,X86採用的是little-endian,所以需要將網路資料流轉換成本機資料流的話,需要進行位元組序的轉換。 標準庫裡提供了hlton()和nthl()兩個函數來支援轉換。hston(unsigned short), hlton(unsigned long) 將本地位元組序轉換為網路位元組序ntohl(unsigned long), ntohs(unsigned short)
Time of Update: 2018-12-05
操作符重載本身實現並不困難,例如class A { friend ostream& operator<<(ostream& os,const class A& a); { os<<"value"<<a.value; }private: int
Time of Update: 2018-12-05
今日遇到的一個問題,給出的解決方案如下: 1. 首先,用sprintf轉換為char * (安全考慮,用springf_s或者是snprintf)2. 用MultiByteToWideChar將轉換後的字串轉換為寬字元(unicode) 注意的是,對於非 int64, 可以用wsprintf()直接將資料格式化為寬字元集,但是wsprintf不支援64位的整型。 代碼sample: char buff[1024];SecureZeroMemory(buff, sizeof(buff));
Time of Update: 2018-12-05
1、首先是傳回值意義的區別,我們先看一下 MSDN 裡的聲明: LRESULT SendMessage ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
Time of Update: 2018-12-05
條款7:當使用new得指標的容器時,記得在銷毀容器前delete那些指標STL中的容器非常優秀。它們提供了前向和逆向遍曆的迭代器(通過begin、end、rbegin等);它們能告訴你所容納的物件類型(通過value_type的typedef);在插入和刪除中,它們負責任何需要的記憶體管理;它們報告容納了多少對象和最多可能容納的數量(分別通過size和max_size);而且當然當容器自己被銷毀時會自動銷毀容納的每個對象。 給了這樣聰明的容器,很多程式員不再擔心用完以後的清除工作。呵呵,他們說
Time of Update: 2018-12-05
STL有很多概念,迭代器,高效的演算法,函數對象,但是對於大多數的開發人員而言,STL最突出的地方還是容器(Container),容器遠遠比數組強大和靈活。 容器可以動態增長,獨立管理記憶體,提供對容器元素的高效的靈活的訪問,等等。STL容器是有效封裝最常見的資料結構和演算法,在我看來,STL容器就是代表著c++的資料結構,從數組,鏈表,棧,隊列,表,雜湊表。每一個容器代表著一種資料結構。 概括一下,STL的容器可以分為以下幾個大類:一:序列容器, 有vector, list, deque,
Time of Update: 2018-12-05
memcpy和memmove()都是C語言中的庫函數,在標頭檔string.h中,作用是拷貝一定長度的記憶體的內容,原型分別如下: void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count); 他們的作用是一樣的,唯一的區別是,當記憶體發生局部重疊的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。
Time of Update: 2018-12-05
問題源於同事的一個問題,VC編譯器裡如何查看double的最大值? 他在limits.h裡沒找到。 在limits.h裡面,只可以看到整型的最大值,但是看不到浮點數的最大值。浮點數的最大值可以這樣得到: #include <iostream>#include <limits> using namespace std; // compile with: /EHsc int main(){ cout << numeric_limits<double&
Time of Update: 2018-12-05
Information Passing Programmer to Team Leader: "We can't do this proposed project. **CANNOT**. It will involve a major design change and no one in our team knows the design of this legacy system. And above that, nobody in our company knows the
Time of Update: 2018-12-05
STL是建立在泛型之上的。數組泛型為容器,以物件類型為參數。函數泛型成演算法,以迭代器類型為參數。指標泛型為迭代器,參數化了所指向的對象的類型。 這隻是個開始。獨立的容器類型泛化為序列或關聯容器,而且類似的容器擁有類似的功能。標準的以連續記憶體為實現的容器都提供隨機訪問迭代器,標準的基於節點的容器都提供雙向迭代器。序列容器支援push_front或push_back,但關聯容器不支援。關聯容器提供對數時間複雜度的lower_bound、upper_bound和equal_range成員函數,但
Time of Update: 2018-12-05
windows下, 庫可以通過以下兩種方式來發布: static link library和dynamic link library.一般我們稱之為靜態庫和動態庫(DLL)。 什麼是靜態串連庫(static link library),什麼是動態連結程式庫(dynamic link library) 首先,靜態連結庫與動態連結程式庫都是共用代碼的方式。 如果採用靜態連結庫,則無論你願不願意,lib 中的定義都全部包含在最終產生的 EXE 中。
Time of Update: 2018-12-05
首先我們先瞭解一下log4cplus中嵌入診斷上下文(Nested Diagnostic Context),即NDC。對log系統而言,當輸入源可能不止一個,而只有一個輸出時,往往需要分辯所要輸出訊息的來源,比如伺服器處理來自不同用戶端的訊息時就需要作此判斷,NDC可以為交錯顯示的資訊打上一個標記(stamp), 使得辨認工作看起來比較容易些,呵呵。這個標記是線程特有的,利用了線程局部儲存機制,稱為線程私人資料(Thread-specific Data,或TSD)。