程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> PB5.0 features/sysgen參數和ceconfig.h中宏定義的對應關系

PB5.0 features/sysgen參數和ceconfig.h中宏定義的對應關系

編輯:.NET實例教程

使用PB建立一個wince image之前先要建立一個workspace來控制除OEM BSP之外的所有的image的屬性,包括的內容等等。這些內容主要是通過PBcatalog來管理的,通過PBvIEwàcatalog打開的視窗,我們從全部的window ce的可選組件中選擇我們需要的加入到workspace中,這樣的話我們sysgen出來的image就具備了相應的功能。從catalog的視窗中,我們可以通過查詢任意一個組件的屬性來獲得它唯一對應的一個sysgen_開頭的變量。但是這些變量並不能直接用來在runtime的情況下用於判斷image具備哪些組件。在實際的運用中,AP可以#include一個名為“ceconfig.h”的頭文件,這個頭文件裡面都是類似”CE_MOULDLE_***  SHELL_MODULES_***  COREDLL_****”之類的宏定義,這些宏定義可以直接被AP用來判定image內是否具備其需要的一些組件,比如MFCAYGSHELL等等。Ceconfig.h是在sysgen的階段自動由系統的批處理生成的,由於ceconfig.h的重要性,所以有必要搞清楚通過PBcatalog生成的sysgen_環境變量是如何和ceconfig.h內部的宏對應起來的。

 

       首先從PB開發環境的OSDesignVIEw中修改的feature將直接反映到以sysgen_開頭的環境變量中,為了驗證有哪些sysgen_已經被設置,可以執行Build OSàOpen release directory進入命令行模式,然後執行“set sysgen”命令,就可以看到所有的sysgen_XXX的環境變量了。這些環境變量是屬於桌面Windows的,可以DOS下或是bat批處理文件中使用。由於DOS下的命令也是支持一些條件判斷語法,如IF ELSE等指令,所以利用DOS批處理文件就可以根據既有的環境變量做進一步的處理了。

 

       現在來介紹微軟是如何利用bat批處理對sysgen_環境變量做轉換,變成cecongfig.h中的宏定義的。

首先來看cesysgen.bat,這個批處理文件每次在Build OsàSysgen的時候會被調用,其位於“D:\WINCE500\PUBLIC\CEBASE\OAK\MISC”(假設wince500安裝在D盤)。

在這個目錄下你可以看到很多bat文件:

D:\WINCE500\PUBLIC\CEBASE\OAK\MISC 的目錄

2004-07-01  12:00               744 cebase.bat

2007-10-31  11:25             7,362 cesysgen.bat

2004-07-01  12:00             3,743 datasync.bat

2004-07-01  12:00             6,081 dcom.bat

2004-07-01  12:00            26,594 directx.bat

2004-07-01  12:00             4,091 gdIEx.bat

2004-07-01  12:00            13,610 IE.bat

2004-10-15  07:15             2,841 netcf.bat

2006-05-04  13:48             9,245 netcfv2.bat

2004-07-01  12:00             5,133 rdp.bat

2004-07-01  12:00             2,632 script.bat

2004-07-01  12:00            20,954 servers.bat

2004-07-01  12:00             2,253 shell.bat

2004-07-01  12:00             1,721 shellsdk.bat

2004-07-01  12:00             1,136 speech.bat

2004-07-01  12:00             1,730 sqlce.bat

2005-12-15  02:20             1,762 sqlmobile.bat

2004-07-01  12:00             3,906 vIEwers.bat

2004-07-01  12:00             5,242 voip.bat

2004-07-01  12:00             3,025 wceaPPSfe.bat

2004-07-01  12:00            15,167 wceshellfe.bat

2006-08-31  15:26           100,533 winceos.bat

後面我們會知道,其他的bat批處理文件都會被cesysgen.bat調用到的。

調用“D:\WINCE500\PUBLIC\CEBASE\OAK\MISC >cesysgen report”的時候,你可以看到一些類似ceconfig.h中的宏定義的字符串:

Report:

SYSGEN_ASYNCMac=1

SYSGEN_AS_BASE=1

SYSGEN_AUDIO=1

…….. 省略

CE_MODULES=coredll nk msim commctrl commdlg rsaenh ….. 省略 (ceconfig.h中的CE_MODULES_XXX一一對應——config.hmctrl commdlg rsaenh ...

COREDLL_COMPONENTS=coremain lmem showerr thunks correct ….. 省略(ceconfig.h中的COREDLL _XXX一一對應——config.hmctrl commdlg rsaenh ...

…&hellip

;

 

這說明,在這個批處理裡面已經有了sysgen->宏定義的轉換了。

ultraedit打開cesysgen.bat,跟蹤report參數,可以走到113行,看到下面的命令:

113 :doReport     #標號

114 echo Report:  #語句顯示Report

115 set SYSGEN  #顯示所有的sysgen_環境變量

116 if "%__IN_BLD_RECURS%"=="1" set SYSGEN >%_WINCEROOT%\__BLD_RECURS_DEP.txt

117 set SYSGEN >%_WINCEROOT%\public\%_TGTPROJ%\__CEBASE_FEATURES.txt

117 for %%f in (%_DEPTREES%) do call :CallProjFile %%f report

主要看117行,這裡是一個for循環,f是變量,%_DEPTREES%f可以取值的范圍,這個語句將%_DEPTREES%中的每個字符串作為參數傳遞給CallProjFile子函數(批處理標號)。為了了解%_DEPTREES%中有那些字符串,可以執行echo %_DEPTREES%,你會看到類似下面的一串字符:

winceos dcom gdiex ie script servers shellsdk shell rdp wceshellfe wceaPPSfe vIEwers directx voip datasync netcf SQLCE ostest speech NETCFV2 SQLMOBILE PROJECTNAME

基本上,上面的字符串和D:\WINCE500\PUBLIC\CEBASE\OAK\MISC目錄下的每一個bat文件是一一對應的。 而且大致可以看出,它們的名字就是wince所有組件歸類之後的組名。

跟蹤到:CallProjFile標號,大概在156行,有如下內容:

:CallProjFile       

    if not exist %__CESYSGEN_PATH%\%1.bat goto :CPF_NotCE

        call %__CESYSGEN_PATH%\%1.bat %2 %3 %4 %5 %6 %7 %8 %9

        goto :EOF

    :CPF_NotCE

 

    if not exist %_PUBLICROOT%\cebase\oak\misc\%1.bat goto :CPF_NotCE2

        call %_PUBLICROOT%\cebase\oak\misc\%1.bat %2 %3 %4 %5 %6 %7 %8 %9

        goto :EOF

    :CPF_NotCE2

 

    if not exist %_PUBLICROOT%\%1\cebasecesysgen.bat goto :CPF_Unknown

        call %_PUBLICROOT%\%1\cebasecesysgen.bat %2 %3 %4 %5 %6 %7 %8 %9

 goto :EOF

    :CPF_Unknown

    if /i "%___PUBLICPROJECT%"=="common" if "%_ECHOON%"=="1" echo WARNING: Unable to find project file %1, args %2 %3 %4 %5 %6 %7 %8 %9

    goto :EOF

 

大致的功能就是到三個路徑去尋找 “參數1.bat 的批處理文件,如果找到並執行之,首先根據%_DEPTREES%可知,第一個參數是winceos,所以我們在D:\WINCE500\PUBLIC\CEBASE\OAK\MISC下面的winceos.bat會被執行。依次類推,dcom.bat gdiex.bat IE.bat script.bat servers.bat ….這些批處理會順序執行。

接下來就到了揭開謎底的時候了,打開winceos.bat. 你可以發現有很多類似

if "%SYSGEN_XXX%"=="1" set CE_MODULES=%CE_MODULES% YYY的語句,這XXXYYY的對應關系就是sysgen_ceconfig的宏定義之間的關系。

所以類似的,打開其他的.bat文件可以分析其他類別的XXXàYYY的對應了。

這樣你可以search到所有的,你想知道的對應關系。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved