原创 二. 回調函數
什麼是回調函數? 簡而言之,回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作爲參數傳遞給另一個函數,當這個指針被用爲調用它所指向的函數時,我們就說這是回調函數。 爲什麼要使用回調函數? 因爲可以把調用者與被調用者
原创 三. MFC中的多線程開發
一、MFC對多線程編程的支持 MFC中有兩類線程,分別稱之爲工作者線程和用戶界面線程。二者的主要區別在於工作者線程沒有消息循環,而用戶界面線程有自己的消息隊列和消息循環。 工作者線程沒有消息機制,通常用來執行後臺計算和維護任務,如
原创 C++字符串流操作
以內存爲中心》 std::stringstream; 主要用於類型轉換; std::istream-->std::ifstream; 文件讀入內存; std::ostream-->std::ofstream; 文件從內存寫入硬盤文件; (
原创 一. 鏈接庫概述
先來闡述一下DLL(Dynamic Linkable Library)的概念,你可以簡單的把DLL看成一種倉庫,它提供給你一些可以直接拿來用的變量、函數或類。在倉庫的發展史上經歷了“無庫-靜態鏈接庫-動態鏈接庫”的時代。 靜態鏈
原创 三. 庫的調試與查看
由於庫文件不能單獨執行,因而在按下F5(開始debug模式執行)或CTRL+F5(運行)執行時,其彈出如圖3所示的對話框,要求用戶輸入可執行文 件的路徑來啓動庫函數的執行。這個時候我們輸入要調用該庫的EXE文件的路徑就可以對庫進行調試了,
原创 二. 靜態鏈接庫
對靜態鏈接庫的講解不是本文的重點,但是在具體講解DLL之前,通過一個靜態鏈接庫的例子可以快速地幫助我們建立“庫”的概念。 建立一個靜態鏈接庫 在VC++6.0中new一個名稱爲libTest的Win32 Static Library工
原创 四. 一個簡單的DLL(非MFC動態鏈接庫)
第2節給出了以靜態鏈接庫方式提供add函數接口的方法,接下來我們來看看怎樣用動態鏈接庫實現一個同樣功能的add函數。 在VC++中new一個Win32 Dynamic-Link Library工程dllTest。注意不要選擇MFC A
原创 五. MFC規則DLL(Regular)
5.1 概述 MFC規則DLL的概念體現在兩方面: (1) 它是MFC的 “是MFC的”意味着可以在這種DLL的內部使用MFC; (2) 它是規則的 “是規則的”意味着它不同於MFC擴展DLL,在MFC規則DLL的內部
原创 一. 異步消息的傳遞-回調機制
1. 什麼是回調 軟件模塊之間總是存在着一定的接口,從調用方式上,可以把他們分爲三類:同步調用、回調和異步調用。同步調用是一種阻塞式調用,調用方要等待對方執行完畢才返回,它是一種單向調用;回調是一種雙向調用模式,也就是說,被調用方在接口被
原创 六. MFC擴展DLL的創建
MFC擴展DLL的內涵爲MFC的擴展,用戶使用MFC擴展DLL就像使用MFC本身的DLL一樣。除了可以在MFC擴展DLL的內部使用MFC以外, MFC擴展DLL與應用程序的接口部分也可以是MFC。我們一般使用MFC擴展DLL來包含一些MF
原创 四. 線程間通訊
一般而言,應用程序中的一個次要線程總是爲主線程執行特定的任務,這樣,主線程和次要線程間必定有一個信息傳遞的渠道,也就是主線程和次要線程間要進行通信。這種線程間的通信不但是難以避免的,而且在多線程編程中也是複雜和頻繁的,下面將進行
原创 七. 讓EXE導出函數及DLL木馬
偶然發現OllyDBG.exe導出了一堆函數,這些函數都是供其插件調用的。對這種體系結構很感興趣,想弄清楚它的實現原理。後來又看到樑肇新的書《編程高手箴言》第278頁提到的調用門,覺得都應該差不多。三種不同的解決辦法(原理可能是一樣的,:
原创 三. 實現回調
聲明函數指針 回調函數是一個程序員不能顯式調用的函數;通過將回調函數的地址傳給調用者從而實現調用。要實現回調,必須首先定義函數指針。儘管定義的語法有點不可思議,但如果你熟悉函數聲明的一般方法,便會發現函數指針的聲明與函數聲明非常類似
原创 MFC設計或實現之漏洞
一. 我使用了OnNcLButtonDown可以響應消息,之後使用OnNcLButtonUp卻不能響應單擊消息,但雙擊能響應。因爲窗口管理器在處理 OnNcLButtonDown 的時候捕捉了鼠標焦點,即使用了 SetCapture 函數
原创 五. 線程的同步
雖然多線程能給我們帶來好處,但是也有不少問題需要解決。例如,對於像磁盤驅動器這樣獨佔性系統資源,由於線程可以執行進程的任何代碼段,且線程的運行是由系統調度自動完成的,具有一定的不確定性,因此就有可能出現兩個線程同時對磁盤驅動器進行操作,從