Time of Update: 2018-12-04
static_cast const_cast reinterpret_cast dynamic_cast 1)staic_cast靜態強制; 不能在無關的指標之間進行static類型強制 class CAnimal { //... public: CAnimal(){} }; class CGiraffe:public CAnimal { //... public: CGiraffe(){} }; int main(void) { CAnimal an; CGiraffe jean; an =
Time of Update: 2018-12-04
第一種方法使用Microsoft的Netbios API。 這是一套通過Winsock提供底層網路支援的命令。使用Netbios的最大缺點是您必須在系統中安裝了Netbios服務(如果您在windows網路中啟用了檔案分享權限設定的話,這就不是問題了)。除此此外,這種方法又快又準確。 Netbios API只包括了一個函數,就叫做Netbios。這個函數使用網路控制區(network control block)結構作為參數,這個結構告訴函數要做什麼。結構的定義如下: typedef
Time of Update: 2018-12-04
該內容是我在看完C++ Primer Plus中string這一章後的總結和理解,呵呵~~~string類有6個建構函式:string(const char *s) 將string對象初始化為s指向的NBTS(傳統的C風格字串)[例]string one("Lottery Winner!")string(size_type n, char)建立一個包含n個元素的string對象,其中每個元素都被初始化為字元csize_type是一個依賴於實現的整型[例]string
Time of Update: 2018-12-04
在MFC的對話方塊程式中,對於初學者來說我們經常調用的是無強制回應對話方塊,因為它比較常見,而且簡單,那麼如何建立無強制回應對話方塊呢?首先我們通過資源編輯器產生對話方塊資源,具體過程為:menu->insert->resource->選中Dialog然後new。然後我們通過類嚮導產生一個新的類。下面就可以進行mode和modeless對話方塊的建立了: 強制回應對話方塊假設我們產生的類是CTestDialog,資源ID為IDD_TEST_DIALOGCTestDialog
Time of Update: 2018-12-04
COM提供的服務元件對象在實現時有兩種進程模型:進程內對象和進程外對象。進程內服務程式:服務程式被載入到客戶的進程空間,在Windows環境下,通常服務程式的代碼是以動態連結程式庫(dll)的形式存在。本地服務程式:服務程式與客戶程式運行在同一台機器上,服務程式是一個獨立的程式,通常它是一個EXE檔案。遠程服務程式:服務程式運行在一個與客戶不同的機器上,他既可以是一個DLL模組也可以是一個EXE程式,如果遠程程式是以DLL形式存在的話,則遠程程式會建立一個代理進程。 GUID可用C++的結構描述
Time of Update: 2018-12-04
Q: 我看了WINX開發包中的文檔中,你提到了超類,它是什麼概念?我平常只聽過子類(Subclass)。A: 子類化(Subclass)是指替換視窗過程(WNDPROC)。 超類(Superclass)是替換視窗過程(WNDPROC),並且替換ClassName。 Subclass不太象繼承,而像是一種外掛(Hook)行為。 Superclass則更像繼承,因為產生了新的視窗類別,並且繼承了行為。 winx中Subclass和Superclass用同一個類實現。都是winx::
Time of Update: 2018-12-04
自修改代碼的簡要曆史自修改代碼有很廣泛的用途:1.在10到20年前使用SMC(自保護代碼)保護應用程式是很難的,即使是用它來把編譯的代碼放到記憶體裡.2.在90年代中期95/NT出現了,那時的程式員對在新的作業系統下如何保護應用程式感到迷惑.不知道該如何將保護措施移植到這個新的版本下.已經不可能再自由的訪問記憶體,硬體,和一般的作業系統,所有以前學會的技巧不得不放棄,開始人們認為除了使用VxD外沒法再寫SMC,這都是因為文檔沒跟上而遭到各方的質疑.然後發現要想在我們的程式中繼續使用SMC,我們可
Time of Update: 2018-12-04
Q 我在用MFC寫一個應用程式,需要在對話方塊中動態增加按鈕。我該怎麼實現訊息控制代碼?A 標準的menu或者button訊息映射控制代碼類似於下面這種形式: ON_COMMAND(ID_MYCOMMAND, OnMyCommand) 但是如果你是動態建立的button/menu項,你可能在編譯時間無法知道命令ID(COMMAND ID).,它可能被儲存在一個資料成員裡,類似於CSqueegie::m_nMeMyMineID 怎麼辦呢?
Time of Update: 2018-12-04
1.已知strcpy函數的原型是:char * strcpy(char * strDest,const char * strSrc);不調用庫函數,實現strcpy函數。解釋為什麼要返回char *。解答:strcpy的實現代碼char * strcpy(char * strDest,const char * strSrc){ if ((strDest==NULL)||(strSrc==NULL)) //[1] throw "Invalid argument(s)"; //[2]
Time of Update: 2018-12-04
FAQ 2.06構造器是用來初始化對象的特殊成員函數,如果需要參數,參數可以在圓括弧()裡提供,如果當前的對象不需要參數,一定不要加圓括弧。下面是一個例子:#include "Car.hpp"void f(){ Car a; <-- 1 Car b(100, 73); <-- 2 // ...}int main(){
Time of Update: 2018-12-04
VC中下面幾個結構體大小分別是多少呢struct MyStruct { double m4; char m1; int m3; }; struct MyStruct { char m1; double m4; int m3; }; #pragma pack(push)//儲存對齊狀態 #pragma pack(16) //設定為16位元組對齊struct test { char m1; int m3; double m4;
Time of Update: 2018-12-04
超類化概述在MFC中表單執行個體對某個表單控制代碼超類化後,系統提供了這樣兩種能力:1.我們對該表單執行個體調用成員函數將會直接改變相關表單控制代碼對應的表單2.系統傳給相關表單控制代碼的訊息會先經過該表單執行個體的訊息映射 我舉一個例子來說明:比如我自己寫了一個類叫CSuperEdit(父類為CEdit),在該類中我聲明了void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);並在訊息迴圈裡添加了ON_WM_CHAR
Time of Update: 2018-12-04
FAQ 2.07 C++允許用new指標動態分配記憶體,動態分配也就是從堆分配。下面顯示了用文法new Car()從堆分配Car對象。結果被存在一個CarPtr指標中,CarPtr是一個auto_ptr的別名,這是一種"安全指標類型"。typedef文法建立了相對應的別名。#include <memory> <-- 1#include <string>using namespace
Time of Update: 2018-12-04
FAQ 2.12 C++支援C-Style的輸出,就像printf()函數族。然而使用C++內建的輸出會更好。在C++內建的輸出功能裡,輸出被集中到一個輸出資料流對象上,例如,cout是一個輸出資料流對象,它被綁定到進程的標準輸出裝置上,一般是程式啟動並執行終端。從文法上看,這些C++輸出服務看起來就象是被轉移到了輸出資料流對象上。要使用這些功能。<iostram>頭需要被定義。#include <iostream>using namespace
Time of Update: 2018-12-04
FAQ 8.14 如果"蘋果袋"以kind-of方式繼承至"水果袋",那麼"水果袋"中就允許放入任何種類以kind-of方式從水果繼承來的具體水果麼? 原文描述 :Is bag-of-apple a kind-of bag-of-fruit, assuming bag-of-fruit allows the insertion of any kind-of fruit? 下表中, Fruit是一個基類,
Time of Update: 2018-12-04
FAQ 2.13 C++支援C-style輸入,例如sanf()函數族。然兒使用C++自身的輸入功能會更好,用C++自身的輸入服務,資訊從一個輸入資料流對象被讀入.例如,cin是一個輸入資料流對象,它被綁定到標準的輸入裝置,通常是指程式運行時的鍵盤輸入。從文法上看這些C++輸入服務可以被當成一個輸入資料流對象。要使用這些功能,需要定義<iostream>標頭檔#include <iostream>#include <string>using
Time of Update: 2018-12-04
隨著諸如代碼重構和單元測試等方法引入實踐,調試技能漸漸弱化了,甚至有人主張廢除調試器。這是有道理的,原因在於調試的代價往往太大了,特別是調試系統整合之後的BUG,一個BUG花了幾天甚至數周時間並非罕見。 而這些難以定位的BUG基本上可以歸為兩類:記憶體錯誤和並發問題。而又以記憶體錯誤最為普遍,即使是久經沙場的老手,也有時也難免落入陷阱。前事不忘,後世之師,瞭解這些常見的錯誤,在編程時就加以注意,把出錯的機率降到最低,可以節省不少時間。 這些列舉一些常見的記憶體錯誤,供新手參考。1.
Time of Update: 2018-12-04
#include "stdafx.h"#define _WIN32_DCOM#include <iostream>using namespace std;#include <comdef.h>#include <Wbemidl.h>#include <conio.h># pragma comment(lib, "wbemuuid.lib")BOOL ManageWMI();int _tmain(int argc, _TCHAR* argv[]){
Time of Update: 2018-12-04
operator
Time of Update: 2018-12-04
理論:所謂SMC(Self Modifying Code)技術,就是一種將可執行檔中的代碼或資料進行加密,防止別人使用逆向工程工具對程式進行靜態分析的方法,只有程式運行時才對代碼和資料進行解 密,從而正常運行程式和訪問資料。本篇通過一個簡單的執行個體來介紹這個技術。需要的運行環境vc6,程式編譯為release版。由於本篇我們要在程式執行過程中,修改程式碼片段中的一個函數內容,而預設情況下,我們編譯產生的程式碼段是可讀可執行屬性。所以我們需要使用一個先行編譯指令。#pragma comment(