原创 二. 回調函數

什麼是回調函數?  簡而言之,回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作爲參數傳遞給另一個函數,當這個指針被用爲調用它所指向的函數時,我們就說這是回調函數。  爲什麼要使用回調函數?  因爲可以把調用者與被調用者

原创 三. 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 函數

原创 五. 線程的同步

雖然多線程能給我們帶來好處,但是也有不少問題需要解決。例如,對於像磁盤驅動器這樣獨佔性系統資源,由於線程可以執行進程的任何代碼段,且線程的運行是由系統調度自動完成的,具有一定的不確定性,因此就有可能出現兩個線程同時對磁盤驅動器進行操作,從