ACE程式入口函式替換機制分析

2021-05-22 15:29:39 字數 2639 閱讀 2856

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是當前程式例項控制...