ace程式入口函式替換機制分析
(hardcorn 寫於2005.10.27)
我們從乙個ace例子進行分析:
ace程式中的ace_tmain巨集說明:
大家注意看我**中的注釋
先看原**:
//--------------------------------------
//copy from: ace_root/ace/os_main.h
//ace_tmain define
# define ace_tmain /
ace_tmain_i (int, ace_tchar *); / //***我們自己的**會新增到這個函式中,進行呼叫
ace_export int ace_os_wintmain_i (ace_main_base&, hinstance, hinstance, lpwstr, int); /* forward declaration */ /
class ace_main : public ace_main_base ; /
inline int ace_main::run_i (int argc, ace_tchar *argv) /
/int winapi winmain (hinstance hinstance, hinstance hprevinstance, lpwstr lpcmdline, int ncmdshow) / //***程式真實的入口
/int ace_tmain_i //***ace為們提供乙個函式頭,函式體由我們自己來寫。
//ace_tmain end.
//-------------------------------------
//-------------------------------------
// copy form ace_root/ace/os_main.cpp
//ace_os_wintmain_i define
int winapi ace_os_wintmain_i (ace_main_base &mbase, hinstance hinstance,
hinstance hprevinstance, lpwstr lpcmdline, int ncmdshow)
//ace_os_wintmain_i end
//-------------------------------------
例子://我寫一ace的**,並將巨集進行還原:
//ace**:
int ace_tmain(int args, ace_tchar *argv)
//將巨集還原後的真實**:
int /*ace_tmain strat*/ ace_tmain_i (int, ace_tchar *);
//注:ace_os_wintmain_i是從ace庫中匯出的函式,直接用函式體來代替這個宣告:
//ace_export int ace_os_wintmain_i (ace_main_base&, hinstance, hinstance, lpwstr, int);
int winapi ace_os_wintmain_i (ace_main_base &mbase, hinstance hinstance,
hinstance hprevinstance, lpwstr lpcmdline, int ncmdshow)
class ace_main : public ace_main_base
; inline int ace_main::run_i (int argc, ace_tchar *argv)
int winapi winmain (hinstance hinstance, hinstance hprevinstance, lpwstr lpcmdline, int ncmdshow)
int ace_tmain_i /*ace_tmain end*/ ( int args, ace_tchar* argv)
//end
winmain -call-> ace_os_wintmain_i [進行ace環境的初始] -call-> ace_main_base::run() -call->ace_main::run_i() -call-> ace_tmain_i[執行我們自己的**]
winmain <-ret- ace_os_wintmain_i [釋放ace環境] <-ret- ace_main::run_i() <-ret- ace_tmain_i
還有,我上邊列出來的ace_tmain只是其中之一,ace做了好幾個程式入口函式的巨集替換:
如:main,wmain
說明:ace對我們的程式入口,進行到替換. 在程式啟動和退出時,做了一些初始化工作。
其中最主要的工作就是:
ace::init()
和
ace::fini();
也就沒有辦法在mfc中做一些「自動」的初始化和釋放工作; 那麼這個工作就只有我們自己完成了...
所以在mfc的工程中使用ace,就得自己呼叫初始化: ace::init(); 和釋放:ace::fini()
如果不調!!!呵呵。那就只好等著出錯了。:)
C 程式入口點函式
cui控制台程式 不是dos,沒有介面的 main 其中處理unicode字元和字串的cui應用程式是 tmain main 處理 字元和字串的cui應用程式是 tamin wmain gui使用者介面程式 winmain 其中處理unicode字元和字串的gui應用程式是 twinmain wwi...
Python 程式入口main函式
在乙個.py檔案中,如果不是在定義函式,也就是說不是在def關鍵字的內嵌結構內,python會預設其餘部分函式是main函式,並自動執行,但正規工程中,一般都會將main函式寫為 if name main 每個人都在寫,但很少有人問,其實這個用法很巧妙!hello.py defsayhello st...
Win32應用程式入口函式
include int winapi winmain hinstance hinstance,hinstance hprevinstance,lpstr lpcmdline,int ncmdshow 1.windows.h是開發window應用程式必須要包含 2.hinstance是當前程式例項控制...