• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 17,comments - 7,trackbacks - 0

                                                                                 ACE程序的入口點(diǎn)
                                                                                                                     --loky 2008.4.7
            用過(guò)ACE的都知道,我們的主函數(shù)被改寫了,加入了初始化的動(dòng)作。主函數(shù)是被宏替換的。下面我們把main的宏替換內(nèi)容找出來(lái)。輸出宏的代碼如下:

            1 #include <ace/Log_Msg.h>
            2 #define MACRO_(x) #x
            3 #define DISPLAY_MACRO(x) (printf("%s",MACRO_(x)))
            4 
            5 int main(int argc, char* argv[])
            6 {
            7     DISPLAY_MACRO(main);
            8     return 0;
            9 };
            展開(kāi)后的main為:
             1 ace_main_i (intchar *[]); 
             2 __declspec (dllimport) int ace_os_main_i (ACE_Main_Base&intchar *[]); 
             3 class ACE_Main : public ACE_Main_Base 
             4 {
             5     int run_i (intchar *[]);
             6 }; 
             7 inline int ACE_Main::run_i (int argc, char *argv[]) 
             8 
             9     return ace_main_i (argc, argv); 
            10 }  
            11 int main (int argc, char *argv[]) 
            12 
            13     ACE_Main m; 
            14     return ace_os_main_i (m, argc, argv); 
            15 int ace_main_i
            這樣我們的原main函數(shù)變成了ace_main_i (int, char *[]);//15行
            而在這之前先執(zhí)行了int ace_os_main_i (ACE_Main_Base&, int, char *[]); //14行
            我們來(lái)看看這個(gè)函數(shù)
            1 ACE_Export int
            2 ace_os_main_i (ACE_Main_Base &mbase, int argc, char *argv[]) /* user's entry point, e.g., main */
            3 {
            4   ACE_MAIN_OBJECT_MANAGER
            5   return mbase.run (argc, argv);           /* what the user calls "main" */
            6 }
            ACE_MAIN_OBJECT_MANAGER,這個(gè)宏完成了我們的初化化動(dòng)作,聲明了一個(gè)ACE_OS_Object_Manager對(duì)象,構(gòu)造函數(shù)中調(diào)用了init ()來(lái)初始化。init就是最后真正的初始化執(zhí)行函數(shù)。這也是ACE程序?yàn)槭裁丛贛FC中要加入init()函數(shù)的原因,因?yàn)镸FC不能通過(guò)main的展開(kāi)來(lái)進(jìn)行初始化。
            初始化完成后,程序是怎么回到我們的業(yè)務(wù)處理上的呢,這個(gè)函數(shù)又調(diào)用了mbase的run,就是展開(kāi)后的主函數(shù)中的m對(duì)象的run,而run函數(shù)又做了什么呢?
            代碼會(huì)告訴我們:
            1 int ACE_Main_Base::run (int argc, char *argv[])
            2 {
            3   return this->run_i (argc, argv);
            4 }
            run又調(diào)用了,ACE_Main_Base::run_i (argc, argv);
            根據(jù)main宏展開(kāi)后的代碼,我們發(fā)現(xiàn)run_i中調(diào)用了ace_main_i (int, char *[]),而這個(gè)函數(shù)就是我們程序中被替換掉的主函數(shù),終于又轉(zhuǎn)到我們的處理單元來(lái)了。
                                                                                                      
            posted on 2008-04-07 22:15 。。。。 閱讀(2649) 評(píng)論(2)  編輯 收藏 引用 所屬分類: ACE

            FeedBack:
            # re: ACE程序入口main?
            2008-04-08 09:32 | true
            希望看到更多的ace文章  回復(fù)  更多評(píng)論
              
            # re: ACE程序入口main?
            2014-12-03 11:44 | hhh
            剛開(kāi)始看ace源碼,在使用ACE_FILE_Connector的connect時(shí)一直失敗跟源碼發(fā)現(xiàn)ACE_OS_Object_Manager沒(méi)有初始化,把main改成ACE_TMain后就好了。原來(lái)如此,再結(jié)合源碼看看,謝謝樓主。  回復(fù)  更多評(píng)論
              
            久久无码精品一区二区三区| 日韩欧美亚洲综合久久 | 久久精品国产一区二区电影| 精品久久久久国产免费| 伊人情人综合成人久久网小说| 久久99精品国产麻豆宅宅| 国产精品久久久久影院嫩草| 色99久久久久高潮综合影院| 亚洲成色www久久网站夜月| 久久激情五月丁香伊人| 青青草原精品99久久精品66| 久久精品中文字幕第23页| 久久夜色精品国产欧美乱| 久久国产AVJUST麻豆| 国产精品成人久久久久三级午夜电影 | 久久影视国产亚洲| 久久精品国产99国产电影网 | 久久久久亚洲精品无码网址 | 久久亚洲精品无码观看不卡| 久久99精品久久久久久久久久| 亚洲精品无码久久毛片| 久久99国产精品99久久 | 日本精品久久久久影院日本| 狠狠狠色丁香婷婷综合久久俺| 欧美伊人久久大香线蕉综合| 色天使久久综合网天天 | 欧美亚洲国产精品久久蜜芽| 欧洲精品久久久av无码电影| 久久婷婷五月综合国产尤物app| 久久综合亚洲色HEZYO国产| 精品久久久久久无码中文字幕| 国产成人综合久久综合| 国产麻豆精品久久一二三| 久久精品国产亚洲AV无码麻豆| 亚洲va久久久噜噜噜久久男同| 麻豆av久久av盛宴av| 亚洲AV无码久久寂寞少妇| 人妻少妇久久中文字幕| 久久ww精品w免费人成| 久久99精品综合国产首页| AA级片免费看视频久久|