Time of Update: 2018-12-04
1.在C++ 程式中調用被C 編譯器編譯後的函數,為什麼要加extern “C”?答:首先,extern是C/C++語言中表明函數和全域變數作用範圍的關鍵字,該關鍵字告訴編譯器,其聲明的函數和變數可以在本模組或其它模組中使用。通常,在模組的標頭檔中對本模組提供給其它模組引用的函數和全域變數以關鍵字extern聲明。extern "C"是串連申明(linkage declaration),被extern
Time of Update: 2018-12-04
有人視宏為洪水猛獸,甚至要求完全從C/C++中摒棄,有人則認為宏為至尊寶典,在邏輯代碼中都大量使用。個人認為這是個仁者見仁智者見智的問題,摒棄就沒必要了,看看宏在MFC和ATL中的一些經典應用,你會發現如果不使用宏來實現一些訊息映射和對象映射神馬的那將讓“苦逼”程式員多花費多少寶貴的時間。當然也不能濫用,尤其是盡量不要在邏輯代碼中使用,宏中的邏輯出問題後,調試時候的痛苦你就真的會發現原來程式員真的挺“苦逼”的。 其實很多人對宏的“恐懼”可能源於下面的一個簡單的宏的實現: #d
Time of Update: 2018-12-04
簡介 對於很多初學者來說,往往覺得回呼函數很神秘,很想知道回呼函數的工作原理。本文將要解釋什麼是回呼函數、它們有什麼好處、為什麼要使用它們等等問題,在開始之前,假設你已經熟知了函數指標。 什麼是回呼函數? 簡而言之,回呼函數就是一個通過函數指標調用的函數。如果你把函數的指標(地址)作為參數傳遞給另一個函數,當這個指標被用為調用它所指向的函數時,我們就說這是回呼函數。 為什麼要使用回呼函數?
Time of Update: 2018-12-04
1、static_cast Operator MSDN: The expression static_cast < type-id > ( expression ) converts expression to the type of type-id based solely on the types present in the expression. No run-time type check is made to ensure the safety of the
Time of Update: 2018-12-04
class customer{public: customer() { } ~customer() { }public: int c_id; char name[10]; char address[20]; int age; std::string sztest; };void init_DBT(DBT * key, DBT * data){ memset(key, 0, sizeof(DBT)); memset(data, 0, sizeof(DBT));}void CTestDBDlg:
Time of Update: 2018-12-04
淺談C/C++記憶體流失及其偵查工具2006.05.25轉載自:http://www.uml.org.cn/c%2B%2B/200605254.htm 對於一個c/c++程式員來說,記憶體流失是一個常見的也是令人頭疼的問題。已經有許多技術被研究出來以應對這個問題,比如Smart Pointer,Garbage Collection等。Smart Pointer技術比較成熟,STL中已經包含支援Smart
Time of Update: 2018-12-04
本文使用了Boost中有關Python的部分,並著重介紹如何用C++寫的函數或是類,並讓Python能調用。先看我們設計好的C++函數和類。#include <string>#include <windows.h>//定義一個函數void msgbox(const std::string& str){ MessageBox(0,str.c_str(),"msgbox",MB_OK);}//定義一個C++類class Hello{public: std:
Time of Update: 2018-12-04
1. 預設建構函式,賦值函數,預設複製建構函式ClassA a;預設建構函式a=b;賦值ClassA(const ClassA&
Time of Update: 2018-12-04
模板和宏前些日子,論壇裡大打口水仗的時候,有人提出這樣一個論斷:模板本質上是宏。於是,諸位高手為此好好辯論了一番。我原本也想加入論戰,但是覺得眾人的言論已經覆蓋了我的想法,所以也就作罷了。儘管沒有參與討論,但“模板究竟和宏有什麼關係”這個問題,始終在我的腦海中上下翻飛。每當我能夠放鬆下來的時候,這個問題便悄悄地浮現。(通常都是哄兒子睡下,然後舒舒服服地沖個熱水澡的時候:))。我思索了半天,決定做些實際的代碼,以瞭解兩者的差異。現在,我把實驗的結果提交給大家,讓眾人來評判。模板和宏是完全兩個東西,
Time of Update: 2018-12-04
C++裡如果將數組定義成類中的成員,將面臨初始化的問題. 如下: Class A{public: A(); ~A(){}; int abc[3];} 很直觀的想法是 A::A(): abc({1,2,3}){ } 很遺憾,你將見到編譯提示法錯誤 當然這裡可以採用變通方法 A::A(){ for( int nLoop=1;nLoop<=3;nLoop++)
Time of Update: 2018-12-04
使用者定義的類型,如:字串,日期,複數,聯合體以及檔案常常重載二元 + 操作符以實現對象的串連,附加或合并機制。但是要正確實現 + 操作符會給設計,實現和效能帶來一定的挑戰。本文將概要性地介紹如何選擇正確的策略來為使用者定義型別重載這個操作符。考慮如下的運算式: int x=4+2;內建的 + 操作符有兩個類型相同的運算元,相加並返回右值 6,然後被賦值給 x。我們可以斷定內建的 +
Time of Update: 2018-12-04
看起來我在做發明車輪的浪費時間的事--windows已經有一套非常複雜功能完善的GUI.不幸的是windows的GUI適用於辦公軟體,而這通常不適合遊戲軟體.遊戲一般需要比windows更精確的控制(例如,使用自己的GUI實現用alpha混合創造的部分透明的視窗比較容易,而使用windows的GUI則幾乎做不到).這篇文章將講述如何使用C++和DirectX來建立自己的GUI.文章分為幾部分,每部分涉及一個特定的GUI編程主題.這並不需要按順序閱讀,所以你可以從你需要的部分開始.這裡我假設讀者有
Time of Update: 2018-12-04
歡迎您繼續閱讀"使用C++和Directx開發GUI"的第二部分.這裡是第一部分.接著我們的主題(講解在我未來的遊戲如何使用GUI(圖形化使用者介面)),本文將解釋表單的許多神秘之處.我們將關注表單樹如何工作,為我們使用GUI制訂計劃,以及建立表單類的細節,包括繪製,訊息機制,座標系統和其他所有的麻煩事兒.
Time of Update: 2018-12-04
使用 DEF檔案從 DLL 匯出模組定義 (.def) 檔案是包含一個或多個描述 DLL 各種屬性的 Module 語句的文字檔。如果不使用__declspec(dllexport) 關鍵字匯出 DLL 的函數,則 DLL需要 .def 檔案。.def 檔案必須至少包含下列模組定義語句:檔案中的第一個語句必須是 LIBRARY 語句。此語句將 .def 檔案標識為屬於 DLL。LIBRARY 語句的後面是DLL 的名稱。連結器將此名稱放到 DLL 的匯入庫中。EXPORTS
Time of Update: 2018-12-04
大家知道MFC中有個資源檔的東東,在C#中也有資源檔,有了他管理各種資源。假如我們程式裡面用到一些字串,但是這些字串有可能在以後會改版,那麼就可以用資源檔來管理,以後修改就更方便了。 廢話少說,我覺得這種東西還是直接用圖片和代碼更加容易懂一些。 先添加新項目,選擇Resource File,然後給檔案命名,這裡我們命名為:StringResourceManage.resx 吧 Add 之後,就可以在VS IDE中對字元進行編輯了。如所示:
Time of Update: 2018-12-04
在寫一個console程式時,想寫一個函數來處理輸出錯誤資訊,像下面這樣 void ExportError( LPCTSTR pError ); 然後在裡面直接通過printf來列印資訊。 void ExportError( LPCTSTR pError ){ printf( pError );} 後來,想這個函數不夠方便,因為我們知道printf支援可變參數的。這樣列印一些錯誤資訊時很方便,如printf( "Error No:%d", 1
Time of Update: 2018-12-04
歡迎回到"使用C++和DX開發GUI"的第三部分.(這裡是第一部分和第二部分).接著我們的主題(描述我如何為我未來的遊戲構建GUI),本文將探討建造GUI所需的一些通用控制項.我們將詳細描述幾種不同的控制項形式,包括按鈕,列表框,文字框等等.這一節並不像其他章節那樣有很多的代碼--這主要是因為我們程式員對於GUI的外觀是很挑剔的.我們喜歡把我們的按鈕,文字框和GUI做的看起來獨一無二,並且符合我們自己的審美標準.這樣的結果是,每個人的控制項代碼都很不同,而且不會想要我的特殊的繪製代碼.此外,寫繪
Time of Update: 2018-12-04
什麼是MasterPage呢?我覺得就是一個模板,把不同網頁的相同部分,如導覽列,Logo,頁頭,頁尾做成一個MasterPage,這樣就可以減少工作量,不用每個網頁都維護一套代碼了。廢話少說: 1.在VS中建立一個MasterPage頁,添加New Item,添加MasterPage,示: 2. 在MasterPage中布局,注意ContentPlaceHolder是讓其它頁面用來擺放自己的控制項的。我們只需放每個網頁公用的就行了, 3. 建立頁面,選中“Select
Time of Update: 2018-12-04
歡迎回到“使用C++和DX開發GUI”的第四部分。接著我們的主題(我是如何為我未來的遊戲開發GUI的 — Quaternion),本文將關注所有的有關遊戲GUI的細節問題。4.1、儲存視窗 視窗序列化(儲存和載入視窗)對你的工程而言或許不重要。如果你的遊戲GUI很簡單,你可以全靠程式在遊戲中實現視窗。但如果你的GUI相對複雜,或者隨著開發的過程經常會改變,那麼你會想寫程式以把一個視窗(和所有它的子視窗)存到檔案裡,然後再裝載它。對初學者而言,視窗序列化代碼允許你改變遊戲的GUI而不用重新編譯,
Time of Update: 2018-12-04
在作應用系統開發時,管理配置是必不可少的。例如資料庫伺服器的配置、安裝和更新配置等等。由於Xml的興起,現在的設定檔大都是以xml文檔來儲存。比如Visual Studio.Net自身的設定檔Mashine.config,Asp.Net的設定檔Web.Config,包括我在介紹Remoting中提到的設定檔,都是xml的格式。 傳統的設定檔ini已有被xml檔案逐步代替的趨勢,但對於簡單的配置,ini檔案還是有用武之地的。ini檔案其實就是一個文字檔,它有固定的格式,節Section的名字用[]