• <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>
            春暖花開(kāi)
            雪化了,花開(kāi)了,春天來(lái)了
            posts - 149,comments - 125,trackbacks - 0
            WinCE驅(qū)動(dòng)開(kāi)發(fā)問(wèn)題精華集錦-2
            摘自: http://hi.baidu.com/mcu%5Fspaces/blog/item/f14d1d2af1a2e33c5243c144.html


            21、 文件格式如下所示,我想把每行的4個(gè)值讀到4個(gè)變量中,用EVC如何編程?  
               第一行: 460.000,   3384672.357342,   521268.972763  
               第二行: 475.117,   3384663.772419,   521281.415271  
               偽代碼如下:  
            FILE   *stream;  
            stream = _wfopen(L"\\a.txt", L"r+");  
            if( stream == NULL )  
                 return;  
            fseek(stream, 0L, SEEK_SET );  
            while( !feof( stream ) )  
            {  
            fwscanf(stream, L"%s", WCHAR1);  
                 fwscanf(stream, L"%f", float1);  
                 fwscanf(stream, L"%f", float2);  
                 fwscanf(stream, L"%f", float3);  
            }  
            fclose( stream );  
              
            22、GWES組件的功能有哪些?  
                 GWES不僅負(fù)責(zé)GDI、窗口、消息,還負(fù)責(zé)管理本機(jī)設(shè)備驅(qū)動(dòng)程序,負(fù)責(zé)加載顯示、鍵盤(pán)鼠標(biāo)、觸摸屏驅(qū)動(dòng)程序,而且GWES本身包含電源、LED驅(qū)動(dòng)程序。  
              
            23、如何在PB中預(yù)先設(shè)定好存儲(chǔ)內(nèi)存和程序內(nèi)存的大小,我想多劃分一些空間給程序內(nèi)存?  
               兩種辦法:  
               1)、在定制內(nèi)核時(shí)在config.bib文件中設(shè)置FSRAMPERCENT = number,具體number可參考標(biāo)題為“FSRAMPERCENT ”的幫助文檔。這種辦法是修改內(nèi)核的設(shè)置,所有一直有效。  
               2)、在應(yīng)用程序中調(diào)用API SetSystemMemoryDivision,如果函數(shù)返回SYSMEM_CHANGED表示成功,如果返回SYSMEM_MUSTREBOOT表示需要熱啟動(dòng)才能有效。這種辦法需要每次啟動(dòng)后調(diào)用API才有效。  
              
            24、 如何取消鼠標(biāo)光標(biāo)?  
               通過(guò)取消SYS變量來(lái)實(shí)現(xiàn)此目的,在PB命令行下鍵入“set SYSGEN_CURSOR=”,然后回車確認(rèn)。  
              
            25、EVC下調(diào)用TextOut如何編譯會(huì)出錯(cuò)?  
                 類似這樣的問(wèn)題很多,這是因?yàn)镋VC的幫助文檔內(nèi)容有錯(cuò)誤。可能EVC的幫助文檔內(nèi)容是從桌面Windows幫助文檔復(fù)制過(guò)來(lái)的,所以很多API函數(shù)還有例子代碼都有錯(cuò)誤,例如幫助文檔中包含一個(gè)API函數(shù)的說(shuō)明,但是實(shí)際編譯的時(shí)候提示沒(méi)有這個(gè)API,有的例子代碼采用ANSI字符串,而WINCE的API都是寬字符版本,造成直接復(fù)制過(guò)來(lái)編譯失敗。  
                 因?yàn)镸FC for WINCE的CDC類中沒(méi)有TextOut成員函數(shù),所以編譯會(huì)出錯(cuò),可以用其它類成員函數(shù)ExtTextOut或者DrawText替換。  
              
            26、我如何將我的dll軟件讓現(xiàn)有的ce系統(tǒng)認(rèn)可?盡管我也知道應(yīng)該使用signfile.exe程序進(jìn)行簽名,但是我并不知道那個(gè)ce系統(tǒng)認(rèn)可的簽名應(yīng)該是啥  
                 如果你說(shuō)的WINCE系統(tǒng)內(nèi)核已經(jīng)加入了簽名認(rèn)證機(jī)制,那么沒(méi)有私鑰對(duì)你的DLL文件簽名肯定是無(wú)法運(yùn)行在此內(nèi)核中的,一般簽名密鑰的密鑰長(zhǎng)度都是1024位,很難破解。  
              
            27、如果查看WINCE注冊(cè)表中的內(nèi)容?  
               兩種辦法:  
               1)、建立同步后,用EVC自帶的工具“Remote Registry Editor”打開(kāi)查看。  
               2)、從網(wǎng)上下載注冊(cè)表查看工具,放到WINCE設(shè)備中。  
              
            28、調(diào)用directshow出現(xiàn)鏈接錯(cuò)誤,如何解決?  
            player.obj : error LNK2001: unresolved external symbol _IID_IVideoWindow  
            player.obj : error LNK2001: unresolved external symbol _IID_IMediaControl  

            這是因?yàn)殒溄悠鳑](méi)有找到合適的.lib文件。兩種辦法:  
            1)、在EVC菜單Tools—options—directories 里把library files的路徑重新調(diào)整一下。如果你只安裝了EVC自帶的Standard SDK而沒(méi)有其它SDK,可以指定WINCE目錄中的.lib文件路徑,例如D:\WINCE500\PUBLIC\DIRECTX\OAK\LIB\X86\RETAIL。注意CPU的類型。  
            2)、安裝SDK,前提是導(dǎo)出SDK的PB內(nèi)核工程必須包括DirectShow或者其它組件。  
              
            29、在PB的config.bib文件中,“IMGFLASH”表示什么意思呢?  
                 表示能夠刷NK到ROM中,具體請(qǐng)查看標(biāo)題為“IMG Environment Variables”的幫助文檔。  
              
            30、x86平臺(tái)如何映射各種地址空間?如何編寫(xiě)中斷服務(wù)例程?  
            如果是x86平臺(tái),可以調(diào)用HalTranslateBusAddress轉(zhuǎn)換物理總線地址到物理系統(tǒng)地址,調(diào)用HalTranslateSystemAddress轉(zhuǎn)換物理系統(tǒng)地址到邏輯總線地址,也可以不調(diào)用這兩個(gè)函數(shù),因?yàn)閤86平臺(tái)除32位物理地址外還有16位的IO地址空間,對(duì)于16位的IO地址空間,可以直接調(diào)用WRITE_PORT_UCHAR或者READ_PORT_UCHAR等函數(shù)直接讀寫(xiě)端口。對(duì)于32位物理地址可以調(diào)用VirtualAlloc和VirtualCopy來(lái)映射。這樣做思路清晰,簡(jiǎn)單明了。  
            在x86平臺(tái)要實(shí)現(xiàn)ISR,有如下幾個(gè)步驟(以Geode BSP為例):  
            1)、用SETUP_INTERRUPT_MAP宏關(guān)聯(lián)SYSINTR和IRQ。以“SYSINTR_”為前綴的常量由內(nèi)核使用,用于唯一標(biāo)識(shí)發(fā)生中斷的硬件,又稱為中斷ID。在Nkintr.h文件中預(yù)定義了一些SYSINTR,OEM可以在Oalintr.h文件中自定義SYSINTR。  
            2)、用HookInterrupt函數(shù)關(guān)聯(lián)硬件中斷號(hào)和ISR。這里提到的硬件中斷號(hào)為物理中斷號(hào),IRQ為邏輯中斷號(hào)。在InitPICs函數(shù)的最后調(diào)用了HookInterrupt函數(shù),如下:  
            for (i = 64; i < 80; i++)  
            HookInterrupt(i, (void *)PeRPISR);   ///用ISR關(guān)聯(lián)16個(gè)中斷號(hào)  
            3)、調(diào)用InterruptInitialize函數(shù)關(guān)聯(lián)SYSINTR和IST創(chuàng)建的事件對(duì)象,也是IST等待的事件對(duì)象。詳細(xì)內(nèi)容請(qǐng)參考Geode BSP源碼。  
               在x86平臺(tái)要實(shí)現(xiàn)可安裝ISR,先調(diào)用LoadIntChainHandler函數(shù)注冊(cè)在注冊(cè)表中指定的ISR DLL,然后填充GIISR_INFO結(jié)構(gòu)體并調(diào)用KernelLibIoControl函數(shù)將此結(jié)構(gòu)體傳遞給可安裝ISR。詳細(xì)內(nèi)容請(qǐng)參考WINCE幫助文檔或者我著的《Windows CE下驅(qū)動(dòng)開(kāi)發(fā)基礎(chǔ)》。  
              
            31、修改了WINCE自帶的驅(qū)動(dòng)程序后如何編譯?如果是自己開(kāi)發(fā)的驅(qū)動(dòng)程序如何編譯?  
            1)、分為IDE方式和命令行方式。  
            IDE方式的編譯很簡(jiǎn)單,以PB5.0為例,打開(kāi)定制內(nèi)核的工程,在左邊的“workspace”—“FileView”中找到你已經(jīng)修改了的目錄,然后單擊右鍵彈出菜單,在菜單中選擇“Build and Sysgen Current Project”,這樣PB就會(huì)編譯指定的目錄中的項(xiàng)目源碼文件,然后執(zhí)行sysgen命令根據(jù)source文件中的內(nèi)容生成目標(biāo)文件并復(fù)制到當(dāng)前內(nèi)核工程目錄下。  
            命令行方式的編譯需要打開(kāi)“Build OS”—“Open Release Directory”,以cd命令進(jìn)入你已經(jīng)修改的驅(qū)動(dòng)程序目錄中,然后鍵入“build –cfs”,然后鍵入“sysgen –p 項(xiàng)目名稱”,一般項(xiàng)目名稱為source文件中的“TARGETNAME”。  
            2)、如果想完全自己開(kāi)發(fā)驅(qū)動(dòng)程序,建議直接采用EVC或者PB來(lái)編寫(xiě)編譯。  
              
            32、開(kāi)發(fā)PCI設(shè)備驅(qū)動(dòng)時(shí),InterruptInitialize函數(shù)的第一參數(shù)是否是PCI卡配置空間信息中的InterruptLine 參數(shù)?是否需要在HKLM\Drivers\BuiltIn\PCI\Template 加一個(gè)自己的 subkey,并填寫(xiě)相應(yīng)內(nèi)容?如何填?  
            1)、InterruptInitialize的第一參數(shù)是IRQ,也就是邏輯中斷號(hào),而不是物理中斷號(hào),InterruptLine是指物理中斷號(hào)  
            2)、需要在template下加自己的PCI設(shè)備的信息,例如:  
               [HKEY_LOCAL_MACHINE\Drivers\PCI\Template\Serial]  
                 "Dll"="Com16550.Dll"  
                 "Class"=dword:07  
                 "SubClass"=dword:00  
                 "ProgIF"=dword:02  
                 "VendorID"=multi_sz:"0AF0","B320","B320"  
                 "DeviceID"=multi_sz:"0020","0300","0302"  
                 "Prefix"="COM"  
            而這些信息就來(lái)自于你執(zhí)行pcienum.exe的結(jié)果。  
              
            33、編譯器報(bào)錯(cuò):error C2065: 'CFileFind' : undeclared identifier,如何解決?  
               MFC for WINCE版本沒(méi)有CFileFind類,所以要查找文件只能調(diào)用API FindFirstFile 和FindNextFile。  
              
            34、如何設(shè)置WINCE系統(tǒng)字體、字號(hào)?如何設(shè)置自己開(kāi)發(fā)的軟件的字體、字號(hào)?  
            1)、系統(tǒng)字體通過(guò)注冊(cè)表設(shè)置。如下:  
            [HKEY_LOCAL_MACHINE\System\GDI\SysFnt]   ///系統(tǒng)字體  
            Wt=420  
            Ht=18  
            Nm=Arial  
            [HKEY_LOCAL_MACHINE\System\GWE\Menu\BarFnt]   ///菜單欄字體  
            [HKEY_LOCAL_MACHINE\System\GWE\Menu\PopFnt]   ///彈出窗口字體  
            [HKEY_LOCAL_MACHINE\System\GWE\Menu]         ///菜單字體  
            HKEY_LOCAL_MACHINE\System\GWE\Button           ///按鈕字體  
            2)、創(chuàng)建字體時(shí)把字體高度參數(shù)設(shè)置大點(diǎn)就可以了。如CFont::CreateFont(nHeight,...),也可以在LOGFONT結(jié)構(gòu)中設(shè)置字體高度或者字體種類。如果是控件,調(diào)用控件的SetFont成員函數(shù)。如果是直接畫(huà),在OnPaint響應(yīng)函數(shù)中調(diào)用SelectObject選字體到DC。  
              
            35、 nk.bin和nk.nb0有什么區(qū)別?  
               這里提到的bin是一種二進(jìn)制鏡像格式,以片斷(section)為單位組織數(shù)據(jù),每個(gè)片斷都包括一個(gè)頭,頭里指定了起始地址,長(zhǎng)度,校驗(yàn)值。Platform Builder調(diào)用工具將WINCE內(nèi)核所有文件以bin格式合并成一個(gè)文件,默認(rèn)文件名為nk.bin。BootLoader又以同樣的格式將nk.bin分解成多個(gè)文件放到RAM中。可以在命令行中鍵入“viewbin nk.bin”來(lái)查看bin文件中具體包括了哪些內(nèi)容。鍵入Cvrtbin命令轉(zhuǎn)換.bin格式文件為.sre格式或者.abx格式。  
               nb0格式是原始的二進(jìn)制鏡像,它不包括頭,一般情況下將內(nèi)核下載到設(shè)備的RAM中運(yùn)行都采用nb0格式。要生成nbx格式的文件,需要在相關(guān).bib文件中確定如下值:ROMSTART、ROMWIDTH、ROMSIZE。  
              
            36、在不采用硬件計(jì)時(shí)器的情況下如何創(chuàng)建更精確的計(jì)時(shí)器?最精確周期能否達(dá)到1毫秒?  
            對(duì)于精確值的要求不同,所采用的辦法不同。以下闡述幾種辦法。  
            1)、在單線程中循環(huán)調(diào)用API Sleep函數(shù),Sleep函數(shù)精確程度為如果Sleep(N),那么實(shí)際睡眠時(shí)間在N到N+1毫秒之間。而且還要注意調(diào)用Sleep的線程優(yōu)先級(jí)的問(wèn)題。如果任務(wù)過(guò)多并且此線程優(yōu)先級(jí)低,那誤差就更大些。  
            2)、調(diào)用API QueryPerformanceCounter函數(shù),舉例如下:  
            LARGE_INTEGER   liFrequency;  
            if (QueryPerformanceFrequency(&liFrequency))   // 查詢系統(tǒng)時(shí)鐘的頻率,這里將返回1000  
            {  
               liFrequency.QuadPart /= 1000;    
               LARGE_INTEGER   liTimeOut;    
               if (QueryPerformanceCounter(&liTimeOut))   //得到截至到當(dāng)前累計(jì)發(fā)生的系統(tǒng)時(shí)鐘中斷次數(shù)  
               {  
                   liTimeOut.QuadPart += liFrequency.QuadPart;   ///計(jì)算下一秒到來(lái)時(shí)總的中斷次數(shù)是多少  
                   LARGE_INTEGER   liCurrent;  
                   do  
                   {          
                     QueryPerformanceCounter(&liCurrent);     // 循環(huán)查詢累計(jì)的的中斷次數(shù)  
                   } while (liCurrent.QuadPart < liTimeOut.QuadPart); ///到達(dá)下一秒  
               }  
            }  
            調(diào)用QueryPerformanceCounter同調(diào)用Sleep在本質(zhì)上都是一樣的,都是在單線程中無(wú)限循環(huán)等到周期一到執(zhí)行任務(wù),相比較QueryPerformanceCounter要比Sleep更精確些,越精確就越要求線程的優(yōu)先級(jí),保障線程能夠正常得到處理器。  
            3)、以上辦法難以保證周期精確到1毫秒并且WINCE系統(tǒng)穩(wěn)定地運(yùn)行,所以要從中斷入手。以x86平臺(tái)為例,先在Timer.c中將默認(rèn)的SetTimer0(TIMER_COUNT)中的TIMER_COUNT /=2,SetTimer0函數(shù)負(fù)責(zé)設(shè)置系統(tǒng)時(shí)鐘的頻率,默認(rèn)1毫秒發(fā)生一次中斷,如果除以2就是0.5毫秒發(fā)生一次中斷。然后在fwpc.c文件中修改ISR函數(shù)PeRPISR,因?yàn)樵瓉?lái)默認(rèn)是1毫秒發(fā)生一次中斷,在處理INTR_TIMER0時(shí)系統(tǒng)負(fù)責(zé)累計(jì)計(jì)數(shù)、管理線程的調(diào)度,返回相應(yīng)的SYSINTR值,而我們沒(méi)有辦法再添加代碼返回自己定義的SYSINTR值,所以現(xiàn)在要修改原來(lái)的處理代碼,例如設(shè)置一個(gè)BOOL型變量,TRUE就執(zhí)行原來(lái)默認(rèn)的代碼,而FALSE就返回我們自己定義的SYSINTR值,這樣即不影響原來(lái)的ISR處理,又加入了我們的中斷響應(yīng)代碼。ISR返回我們定義的SYSINTR后WINCE內(nèi)核激活相對(duì)應(yīng)的EVENT事件,我們就可以在我們編寫(xiě)的IST里處理任務(wù)了。  
              
            37、flash中存放了BootLoader和內(nèi)核鏡像,如何把剩余flash部分劃分為一個(gè)存儲(chǔ)區(qū)域供應(yīng)用程序讀寫(xiě)?  
               以WINCE提供的驅(qū)動(dòng)(FAT文件系統(tǒng)和MSFLASH驅(qū)動(dòng))來(lái)舉例說(shuō)明。如果采用默認(rèn)common.reg中的注冊(cè)表設(shè)置,那么MSFLASH驅(qū)動(dòng)默認(rèn)把整個(gè)flash作為存儲(chǔ)區(qū)域來(lái)讀寫(xiě),這不符合問(wèn)題的要求,所以必須告訴MSFLASH驅(qū)動(dòng)程序可供讀寫(xiě)的區(qū)域的起始地址和長(zhǎng)度。以下是一個(gè)注冊(cè)表例子:  
            [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FASLD]  
                 "Dll"="fasld.dll"         ///實(shí)際Flash存儲(chǔ)器的驅(qū)動(dòng)程序  
                 "Order"=dword:2       ///該驅(qū)動(dòng)程序相對(duì)于其它驅(qū)動(dòng)程序的加載順序  
                 "Prefix"="DSK"         ///前綴  
                 "Ioctl"=dword:4         ///IOCTL碼,設(shè)備管理器加載驅(qū)動(dòng)的時(shí)候調(diào)用IOControl函數(shù),傳遞這個(gè)IOCTL碼。  
            "Profile"="MSFlash"     ///Profile名稱,也就是[HLM\System\StorageManager\Profiles\MSFlash]  
            ///當(dāng)設(shè)備管理器加載此驅(qū)動(dòng)程序的同時(shí)發(fā)送通知給系統(tǒng),IClass(GUID)的值表明這是一個(gè)存儲(chǔ)設(shè)備的驅(qū)動(dòng)程序。  
            "IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"    
                 "MemBase"=dword:00000000     ///Flash中可供讀寫(xiě)區(qū)域的起始物理地址,也就是Flash的首地址+偏移量  
                 "MemLen"=dword:00000000     ///Flash中可供讀寫(xiě)區(qū)域的長(zhǎng)度  
            [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MSFlash]  
                 "DefaultFileSystem"="FATFS"   ///MSFlash驅(qū)動(dòng)默認(rèn)采用的文件系統(tǒng)  
                 "PartitionDriver"="mspart.dll"     ///采用的分區(qū)驅(qū)動(dòng)程序  
                 "MountAsRoot"=dword:1         ///此目錄作為文件系統(tǒng)的根目錄  
                 "Folder"="NOR Flash"           ///目錄名稱  
                 "Name"="FLASH Disk Block Device"   ///Flash驅(qū)動(dòng)名稱  
            "PartitionDriverName"="MSPART" ///分區(qū)驅(qū)動(dòng)名稱  
            "AutoMount"=dword:1         ///自動(dòng)裝載檢測(cè)到的分區(qū)  
                 "AutoPart"=dword:1             ///自動(dòng)分區(qū)  
                 "AutoFormat"=dword:1           ///自動(dòng)格式化分區(qū)  
            [HKEY_LOCAL_MACHINE\System\StorageManager\AutoLoad\MSFlash]  
                 "DriverPath"="Drivers\\BuiltIn\\FASLD"     ///Flash驅(qū)動(dòng)在注冊(cè)表中的位置  
                 "LoadFlags"=dword:1                 ///這個(gè)值可以被設(shè)置為0、1、2。1表示同步加載,其它表示異步加載  
                 "Order"=dword:0  
            [HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]  
                 "FriendlyName"="FAT FileSystem"     ///文件系統(tǒng)名稱  
                 "Dll"="fatfsd.dll"                   ///文件系統(tǒng)驅(qū)動(dòng)程序  
                 "Flags"=dword:00000064             ///標(biāo)志,詳見(jiàn)幫助文檔  
                 "Paging"=dword:1                   ///是否分頁(yè)  
                 "EnableCache"=dword:1               ///是否允許緩存數(shù)據(jù)  
                 "CacheSize"=dword:0                 ///指定緩存大小,0表示默認(rèn)  

            38、驅(qū)動(dòng)程序如何發(fā)通知給應(yīng)用程序?  
               這里介紹一下常見(jiàn)的兩種辦法。  
               1)、驅(qū)動(dòng)程序調(diào)用API SendNotifyMessage,發(fā)送特定的消息給應(yīng)用程序,這就要求應(yīng)用程序要有消息循環(huán)機(jī)制并且要事先做好消息的處理。參數(shù)1為窗口句柄,可以設(shè)置HWND_BROADCAST表示廣播消息。要注意的是不要在參數(shù)中傳遞指針(虛擬地址),因?yàn)閳?zhí)行驅(qū)動(dòng)程序的線程和應(yīng)用程序并不在同一個(gè)進(jìn)程空間中。解決辦法可以利用內(nèi)存映射文件技術(shù),比如在驅(qū)動(dòng)程序中創(chuàng)建一個(gè)內(nèi)存映射文件對(duì)象,申請(qǐng)一塊物理內(nèi)存,然后把對(duì)象名稱和內(nèi)存長(zhǎng)度傳遞給應(yīng)用程序,應(yīng)用程序打開(kāi)同名的內(nèi)存映射文件對(duì)象,讀取里面的數(shù)據(jù)。對(duì)象名稱可以事先協(xié)定好,也可以通過(guò)注冊(cè)表來(lái)傳遞,內(nèi)存長(zhǎng)度是32位值,通過(guò)消息參數(shù)就可以傳遞,也可以通過(guò)注冊(cè)表來(lái)傳遞。另外一種解決辦法是在定制內(nèi)核時(shí)候預(yù)留一塊物理內(nèi)存,這樣驅(qū)動(dòng)程序和應(yīng)用程序都可以通過(guò)VirtualAlloc和VirtualCopy來(lái)映射到同一塊物理內(nèi)存,其原理同內(nèi)存映射文件技術(shù)一樣,但是這塊物理內(nèi)存不具備通用性。最后一個(gè)辦法是應(yīng)用程序事先將一個(gè)緩沖區(qū)地址傳遞給驅(qū)動(dòng)程序,驅(qū)動(dòng)程序調(diào)用MapPtrToProcess映射應(yīng)用程序傳遞過(guò)來(lái)的地址,當(dāng)驅(qū)動(dòng)程序調(diào)用SendNotifyMessage后應(yīng)用程序可以直接到該地址中讀取數(shù)據(jù)。  
               設(shè)備管理器就是調(diào)用此函數(shù)廣播WM_DEVICECHANGE消息的。另外WINCE的一個(gè)例子程序RNAApp在撥號(hào)連接建立的時(shí)候也是調(diào)用這個(gè)函數(shù)廣播WM_NETCONNECT消息的。  
               2)、驅(qū)動(dòng)程序調(diào)用API CeEventHasOccurred指明一個(gè)事件A發(fā)生,在此之前應(yīng)用程序調(diào)用API CeRunAppAtEvent將驅(qū)動(dòng)程序指明的A事件和一個(gè)應(yīng)用程序名稱相關(guān)聯(lián),或者和一個(gè)事件B相關(guān)聯(lián)。這樣當(dāng)A事件發(fā)生時(shí),如果指明和一個(gè)應(yīng)用程序名稱關(guān)聯(lián),那這個(gè)應(yīng)用程序就會(huì)被啟動(dòng)。如果指明了和一個(gè)事件B相關(guān)聯(lián),那么等待事件B的線程將被激活。如果想了解當(dāng)前系統(tǒng)內(nèi)部所有驅(qū)動(dòng)程序支持哪些類似事件A的事件,調(diào)用API CeNotifyPublic_FilterEvent,在該API的幫助文檔里也列舉了常見(jiàn)的事件,例如NOTIFICATION_EVENT_NET_CONNECT和 NOTIFICATION_EVENT_NET_DISCONNECT。  
              
            40、 EVC創(chuàng)建的工程名稱如果用中文就出錯(cuò),該怎么辦?  
               用EVC創(chuàng)建的工程名稱如果為中文將導(dǎo)致資源文件打不開(kāi)和編譯出錯(cuò),可以改資源文件名稱為英文,再編輯.rc文件中的資源文件名稱。但建議盡量不要用中文為工程名稱。  
               作為習(xí)慣,應(yīng)該在EVC創(chuàng)建一個(gè)工程后,立刻在“project”—“settings”中設(shè)置資源的語(yǔ)言屬性,然后在“resource view”中設(shè)置每個(gè)資源的語(yǔ)言屬性,這些工作做完后再修改資源就沒(méi)有問(wèn)題了。有人詢問(wèn)對(duì)話框的標(biāo)題為亂碼,其原因就是在沒(méi)有修改語(yǔ)言屬性的情況下設(shè)置標(biāo)題為中文。
            posted on 2009-07-16 15:41 Sandy 閱讀(735) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Windows Mobile
            久久免费视频观看| 久久久久波多野结衣高潮| 欧美久久久久久午夜精品| 久久精品亚洲一区二区三区浴池| 一本大道加勒比久久综合| 99蜜桃臀久久久欧美精品网站| 久久99热这里只频精品6| 国产午夜电影久久| 久久97久久97精品免视看| 久久精品国产亚洲沈樵| 久久婷婷国产综合精品 | 亚洲国产精品无码久久98| 久久综合色老色| 久久久久久午夜精品| 亚洲AV日韩精品久久久久久久| 无码国内精品久久人妻蜜桃| 东方aⅴ免费观看久久av| 久久热这里只有精品在线观看| 久久精品aⅴ无码中文字字幕重口| 久久国产精品99国产精| 国产精品免费看久久久| 精品综合久久久久久88小说| 久久精品中文字幕有码| 狠狠精品久久久无码中文字幕| 国色天香久久久久久久小说| 伊人久久无码中文字幕| 久久亚洲精精品中文字幕| 国产精品熟女福利久久AV| 狠狠色丁香久久婷婷综合蜜芽五月 | 亚洲国产精品婷婷久久| 一本一道久久精品综合| 欧美日韩中文字幕久久久不卡| 亚洲成色www久久网站夜月| 久久精品免费一区二区| 草草久久久无码国产专区| 日本久久中文字幕| 久久久久亚洲AV无码网站| 9999国产精品欧美久久久久久 | 99国产欧美精品久久久蜜芽| 久久无码AV中文出轨人妻 | 九九久久99综合一区二区|