一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

LCC-Win32介紹-lianger

 Synix 2010-02-05

LCC-Win32介紹
    LCC-Win32原來是一個(gè)免費(fèi)的WIN32編譯器,包含一個(gè)很好用的IDE,用起來很爽,但是最近的版本是要付費(fèi)的了(40美圓)。詳情請(qǐng)見LCC-Win32官方網(wǎng)站。它的免費(fèi)版本可以在國內(nèi)得到,到云風(fēng)工作室看一下,你會(huì)有所收獲。

 


簡介
    其實(shí)所謂的簡介這個(gè)部分的內(nèi)容趨向取決于作者。但是我所讀過的一些指南都是由一個(gè)“簡介”開始的,這部分的內(nèi)容通常都是在重復(fù)讀者會(huì)在下面看到的東西,但是也有的簡介只是作者的一些想法。
    仔細(xì)的想一下,其實(shí)這個(gè)介紹并不是一件簡單的事情。首先,如果你要是開門見山的直奔主題,這是不禮貌的,而且基于web的指南也不應(yīng)該有超大個(gè)的簡介,不應(yīng)該讓讀者在這個(gè)東西上浪費(fèi)時(shí)間和金錢。

    看來我的廢話也夠多的了,讓我們切入正題。

    這個(gè)指南是單頁的,建議你等瀏覽器下載完畢后保存一份拷貝來離線閱讀。

 

編譯器的安裝
    編譯器的安裝簡單極了,只要把您下載的文件運(yùn)行一下就OK了,應(yīng)該不會(huì)遇到什么問題。但是注意安裝的最后要編譯庫文件,可能要花點(diǎn)時(shí)間,要視你的機(jī)器速度而定。


Lcc-Win32的一些基本概念
    Lcc-Win32編譯系統(tǒng)是由多個(gè)文件構(gòu)成的。它們的共同的任務(wù)是把文本格式的源代碼編譯位可以運(yùn)行的二進(jìn)制格式。優(yōu)良個(gè)重要的文件分別是編譯器(lcc.exe)和連接器(lcclnk.exe)。
    編譯器是用來把你編寫的文本翻譯成處理器可以執(zhí)行的格式的程序。連接器用來轉(zhuǎn)換編譯器生成的二進(jìn)制文件(通常叫做目標(biāo)文件),并添加操作系統(tǒng)用來把程序調(diào)入內(nèi)存并執(zhí)行所需要的信息它可以把多個(gè)目標(biāo)文件鏈接為一個(gè)單獨(dú)的程可執(zhí)行程序,這樣就可以使你可以把一個(gè)程序的代碼文檔分割為幾個(gè)模塊,這個(gè)能力在你開發(fā)大型程序時(shí)是很重要的。

    雖然這些聽起來好像十分的簡單,但是實(shí)際上并不是這個(gè)樣子的。編輯器和鏈接器需要你在命令行方式下鍵入你要建立的程序的所有信息,這將需要你記住大量的命令行參數(shù)和各種各樣的開關(guān),這時(shí)就需要IDE——集成開發(fā)環(huán)境(edit.exe)來提供方便了。

    IDE的基本功能是編輯文本,你可以在這個(gè)環(huán)境里編輯程序的源代碼,但是遠(yuǎn)遠(yuǎn)不止有這個(gè)功能。它還給你提供了一個(gè)調(diào)用編譯器和鏈接器的簡單方法,這樣在編譯程序的時(shí)候你就不用去記住那么多的命令行參數(shù)了。

    你可以簡單的把Wedit想象成你的控制臺(tái),在這里你可以控制所有的流程。

    好吧!現(xiàn)在你可以用你的鼠標(biāo)點(diǎn)一下Windows的“開始”按鈕,在程序項(xiàng)的子菜單了尋找“lcc-win32”,好了嗎?現(xiàn)在你已經(jīng)準(zhǔn)備好在Lcc-Win32中寫你的第一個(gè)程序了。

 

寫個(gè)小程序!
    你知道嗎?自從第一個(gè)C編譯器產(chǎn)生以來(也許可能更早一些),有一個(gè)慣例就是為這個(gè)編譯器寫的第一個(gè)程序是“Hello World”,我為我擁有的所有編譯器都寫過,現(xiàn)在我們就來寫一個(gè)。
    第一步是創(chuàng)建源碼文件。在“File”菜單中選擇“new”項(xiàng),然后在出現(xiàn)的對(duì)話框中輸入“hello.c”并點(diǎn)一下“OK”。

    現(xiàn)在你看到的是一個(gè)標(biāo)題為“hello.c”的空白窗口,輸入下面的代碼:

#include <stdio.h>

void main (void)
{
    printf ("Hello World from LCC-Win32!\n");
}

    保存我們的小程序,在“File”菜單中選擇“Save”項(xiàng)。

    現(xiàn)在我們可以編譯這個(gè)程序了。選擇“Compiler”菜單中的“Compile hello.c”調(diào)用編譯器。這時(shí)一個(gè)新窗口會(huì)出現(xiàn)在IDE的底部,這是信息窗口,當(dāng)編譯器處理完成,在這個(gè)窗口中將會(huì)顯示“HELLO.exe build successfully.”,如果編譯出錯(cuò),出錯(cuò)信息也將會(huì)被顯示在這里。

    如果編譯出錯(cuò)了,在信息窗口處雙擊信息顯示所在行,在編輯窗口內(nèi)將高亮度顯示出錯(cuò)代碼行,仔細(xì)的檢查一下你寫的程序和上面我寫的一樣,這里需要注意的是C語言是大小寫敏感的程序語言,這意味著“printf”和“Printf”對(duì)編譯器是不相同。

    現(xiàn)在你已經(jīng)編譯好了這個(gè)程序,按[Ctrl]+[F5]鍵運(yùn)行一下,結(jié)果對(duì)嗎?


使用工程管理
    現(xiàn)在你已經(jīng)編譯了你的第一個(gè)程序,你可能想知道——執(zhí)行文件在哪里?
    回答是:我也不知道!這可能聽起來很傻(的確也是),但是這是看你在編譯程序時(shí)的缺省目錄是什么,所以你應(yīng)該在你的硬盤里搜索一個(gè)叫做“hello.exe”的文件。

    你肯定不會(huì)想要每開發(fā)一個(gè)程序都要搜索一下硬盤的,這種情況下你就要使用工程。

    工程是一些編譯器要知曉的建立程序所需要的信息。這包括程序源文件、編譯好的文件的存放地點(diǎn)、要編譯為什么類型的可執(zhí)行文件,一個(gè)好的想法是為每一個(gè)程序建立一個(gè)工程。

    事實(shí)上,對(duì)于我們的“HelloWorld”程序還是有一個(gè)工程的,Lcc=Win32會(huì)為沒有指明工程的程序建立一個(gè)缺省的工程。選擇“Project”菜單的“Erase...”項(xiàng),Wedit會(huì)顯示一個(gè)工程列表,你會(huì)看到一個(gè)項(xiàng)目叫做“HELLO”,現(xiàn)在我們毫不留情的刪除它。

    與其他的編譯器不同的是,Lcc-Win32的工程信息不是存儲(chǔ)在硬盤上的,而是存儲(chǔ)在Windows的注冊表項(xiàng)里。這使得Wedit可以“記住”所有的工程,甚至于在不同的磁盤上。但是優(yōu)勢我們也需要清除我們不再使用的工程,在這種情況下,我們可以把工程信息導(dǎo)出到磁盤上,然后在IDE中刪除它??匆幌?#8220;Project”菜單的選項(xiàng),你就會(huì)明白了。

    現(xiàn)在你可以試著創(chuàng)建一個(gè)“HELLO”工程。


第一個(gè)Windows程序
    你可能已經(jīng)注意到了hello.exe看起來象是一個(gè)DOS程序,但是它不是的,它是一個(gè)真正Windows程序,但是這種類型的程序被稱為Windows控制臺(tái)程序,就是在文本模式下運(yùn)行的Windows程序。如果你不相信,可以試著在Windows的純DOS環(huán)境下運(yùn)行一下,你會(huì)得到一行信息:“This program cannot be run in DOS mode”。
    寫一個(gè)真正的Windows版的“HelloWorld”程序并不比控制臺(tái)的版本難多少。首先創(chuàng)建一個(gè)新工程,選擇“Windows executable”代替“Console application”,點(diǎn)OK后,Lcc-Win32會(huì)問你需要Wizard(生成向?qū)В﹦?chuàng)建程序框架嗎,回答No。

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox (NULL, "Hello world from Lcc-Win32!", "Hello", MB_OK);
    return 0;
}

    編譯并運(yùn)行這個(gè)程序,你會(huì)看到一個(gè)顯示hello信息的窗口,點(diǎn)ok關(guān)閉退出。

    不幸的是,除了這樣的小之又小的Windows程序,一般情況下Windows程序是很復(fù)雜的,現(xiàn)在你已經(jīng)知道了如何創(chuàng)建工程和編譯程序,如果你是一個(gè)Windows編程新手,去找一些有關(guān)的書來看看,取得必要的基礎(chǔ),一些Windows編程知識(shí)在下面的部分是必須的。

    如果你是一個(gè)C語言的新手,那么先好好的學(xué)一段時(shí)間再來看這個(gè)指南吧!


程序生成向?qū)?
    Windows程序與文本狀態(tài)下的程序比起來要好的多,但是天上不會(huì)掉餡餅的,你想要得到的Windows功能支持,比如:剪裁板、多任務(wù)等等要付出的是大量的復(fù)雜的代碼。
    但是總還是有些辦法可以使事情變得簡單一些的。長時(shí)間以來,程序員們發(fā)現(xiàn)實(shí)際上總是有些在每個(gè)程序中都相同的代碼段,所以Windows程序員通常使用模板來生成這部分代碼。就是說源文件一般只要生成一次,就可以在任何一個(gè)新程序中使用了。只有變化的部分才是每個(gè)程序不同的部分,顯然這些應(yīng)該是可以自動(dòng)的進(jìn)行的。

    這就是生成向?qū)б瓿傻墓ぷ?。你可以在它的幫助下快速的生成?yīng)用程序的框架。這個(gè)框架事實(shí)上就是一個(gè)什么功能也沒有的一個(gè)完整的程序,也許可能只是用來顯示一個(gè)空窗體,因?yàn)槭钩绦蛲瓿删唧w的功能是你的工作。

    讓我們看一下使用向?qū)Ы⒆詈唵蔚膽?yīng)用程序的處理。

    通常,第一步是創(chuàng)建程序代碼,然后建立一個(gè)工程。在使用向?qū)У哪J较?,你并不需要寫一行代碼,向?qū)槟憬⑺?,我們直接來看建立工程各個(gè)步驟。

    在“Project”菜單下選擇“create”項(xiàng),給出項(xiàng)目名稱和路徑,選擇工程類型為“Windows executable”,當(dāng)Wedit詢問你是否要使用向?qū)В╳izard),回答“yes”,這樣就進(jìn)入了向?qū)J健?

    向?qū)@示一個(gè)對(duì)話框叫做:“Application characteristics”,這是向?qū)⒃趹?yīng)用程序中包含的基本特點(diǎn),你可以選擇以下情況的一種:單窗口、多窗口和DLL(動(dòng)態(tài)鏈接庫),現(xiàn)在我們要?jiǎng)?chuàng)建一個(gè)十分簡單的單窗口小應(yīng)用程序,選擇單窗口類型并確保所有的特性復(fù)選按紐都未被選中,點(diǎn)擊“OK”進(jìn)行處理。

    現(xiàn)在向?qū)⒁崾灸爿斎胄畔⒃O(shè)置主窗口的“類”,這里所說的“類”和C++中的類是不同的,它是Windows在內(nèi)存中存儲(chǔ)的一個(gè)結(jié)構(gòu),用來存儲(chǔ)正確顯示窗口所需要的信息。最重要的是“回叫函數(shù)”(下面將具體介紹)的名稱,現(xiàn)在只要簡單接受默認(rèn)的屬性值,點(diǎn)擊“NEXT”進(jìn)行處理。

    這個(gè)“Generate code for the main window creation”對(duì)話框用來設(shè)定相應(yīng)窗口的信息。當(dāng)主窗體被創(chuàng)建的時(shí)候這些信息會(huì)被傳送到相應(yīng)的窗口。在這里你可以改變窗口的標(biāo)題欄的顯示內(nèi)容,然后點(diǎn)擊“Finish”。

    向?qū)У墓ぷ骶鸵瓿闪耍酉聛淼墓こ虅?chuàng)建工作是通常的一些對(duì)編譯器、鏈接器、調(diào)試器的一些設(shè)置,這里只要簡單的接受缺省的選項(xiàng)就可以了。

    經(jīng)過上面的步驟,就完成了向?qū)У乃械墓ぷ?,你可以在IDE中看到兩個(gè)窗口,一個(gè)是源程序編輯窗,另外的一個(gè)是用來定義應(yīng)用程序的主菜單的腳本。

    正象剛剛所說的那樣,這個(gè)程序框架是全功能的,可以通過編譯并運(yùn)行,你可以看到一個(gè)有菜單的窗口。唯一可以進(jìn)行的操作是“File”菜單的“Exit”項(xiàng),你可以使用這個(gè)菜單項(xiàng)關(guān)閉這個(gè)簡單的窗口,也可以使用[Ctrl]+[Q]完成同樣的操作。

    現(xiàn)在你可以看一下這個(gè)程序的源代碼,你會(huì)注意到這個(gè)程序比那個(gè)“Hello World!”程序復(fù)雜了許多,我可以告訴你一個(gè)小竅門——從源代碼的結(jié)尾開始讀起,因?yàn)橥ǔD抢锊攀且恍┕δ芎瘮?shù)的所在。

 

使用WeditRes創(chuàng)建資源
    在Windows程序的開發(fā)中,資源是十分重要的部分,菜單、對(duì)話框和其它的一些用戶接口部分都是可以象寫程序一樣的編寫的,可以簡單的作為資源包含進(jìn)程序中。
    如果Lcc-Win32沒有提供一個(gè)資源編輯器那么Lcc-Win32將不是一個(gè)完整的Win32編譯程序,Lcc-Win32提供的資源編輯器叫做WeditRes,是在“lcc\bin\”路徑下。

    的確,WeditRes還是在不斷的完善的過程中,也就是說還沒有開發(fā)完成。不過它已經(jīng)可以編輯一些手工編輯難以完成的資源了,比如:菜單和對(duì)話框等等。在IDE下調(diào)用WeditRes,在“Compiler”菜單下選擇“Resources”項(xiàng)。

    如果你正在開發(fā)的程序是用向?qū)傻模敲聪驅(qū)?huì)產(chǎn)生一個(gè)資源文件,在這個(gè)文件里至少包括菜單資源,WeditRes會(huì)打開這個(gè)資源文件,但是它不會(huì)找到相應(yīng)的頭文件,你應(yīng)該為它指明頭文件的路徑。通常是在WeditRes當(dāng)前工作路徑的上一級(jí)目錄。WeditRes要找的文件通常叫做prjnamewiz.h,這里的prjname是你指定的工程的名稱。經(jīng)過這一步就可以修改工程所用的資源了。

     如果你的程序不是由向?qū)傻?,那么WeditRes會(huì)提示你輸入資源文件的文件名,輸入一個(gè)名稱后點(diǎn)擊“OK”,這時(shí)WeditRes會(huì)說不能打開這個(gè)資源文件,沒有關(guān)系,這是因?yàn)檫@個(gè)目錄下的確是沒有資源文件的,還是在這個(gè)對(duì)話框中點(diǎn)擊“OK”,然后在“File”菜單中選擇“New”項(xiàng),這樣就會(huì)為你的工程創(chuàng)建一個(gè)新的資源工程,鍵入一個(gè)工程名,一般情況是和應(yīng)用程序的工程名相同,然后點(diǎn)擊“Validate”,現(xiàn)在你需要手工在應(yīng)用程序工程列表里添加這個(gè)資源文件(一般以“RES”為擴(kuò)展名)。

    在這里試舉一例——我們來為我們上面創(chuàng)建的程序創(chuàng)建一個(gè)“關(guān)于”對(duì)話框資源。

    運(yùn)行WeditRes,輸入頭文件的路徑后選擇“Objects”菜單的“New dialog”項(xiàng),這時(shí)WeditRes會(huì)顯示一個(gè)對(duì)話框,標(biāo)題欄為“Dialog box parameters”,改變對(duì)話框的標(biāo)題為“About this application”或者隨便其它的什么東西,然后在“Identity”(標(biāo)識(shí)符)項(xiàng)鍵入一個(gè)你喜歡的東西,比如:“DLG_ABOUT”,在“standard buttons”選單中選擇“Validate”選項(xiàng)并點(diǎn)擊“OK”關(guān)閉對(duì)話框。

    你在這個(gè)時(shí)候應(yīng)該可以看到一個(gè)新的對(duì)話框和一個(gè)浮動(dòng)的工具條,在對(duì)話框中也應(yīng)該有一個(gè)按紐,你可以用鼠標(biāo)拖動(dòng)它來重新指定它的位置,如果你還想改變按紐上顯示的文字——雙擊它打開屬性對(duì)話框,或者先選定它,然后在浮動(dòng)工具條下改變顯示文字。

    下面我們添加一個(gè)靜態(tài)文本標(biāo)簽,在工具條上選擇文本工具,光標(biāo)形狀變成由一個(gè)矩形包圍的指針,在對(duì)話框的窗體上點(diǎn)擊一下,一個(gè)包含文本——“Text”——的矩形會(huì)出現(xiàn)在你點(diǎn)擊的地方,可以通過鼠標(biāo)拖動(dòng)來改變這個(gè)文本框的大小,同樣也可以改變顯示的文本和文本框的位置。

    我們還可以在這個(gè)對(duì)話框中添加其它的裝置??招姆娇颉?shí)心方框和組件盒等可以對(duì)這個(gè)對(duì)話框進(jìn)行一些簡單的裝飾。如果你想要?jiǎng)h除一個(gè)裝置,選定它然后按[Ctrl] + [X],或者選擇“Edit”菜單的“Cut”項(xiàng)。還可以選擇“Options”菜單的“Test”項(xiàng)測試這個(gè)對(duì)話框的外觀。在工具欄里有一個(gè)按紐的功能是相同的,就是看起來象一個(gè)開關(guān)的那個(gè),如果想要繼續(xù)編輯這個(gè)對(duì)話框,只要再次選擇上述選項(xiàng)一次即可。

    編輯完成后在“File”菜單中選擇存盤,然后關(guān)閉WeditRes,為了顯示這個(gè)對(duì)話框下面我們必須在程序中包含相應(yīng)的代碼。

    尋找“OnCommand”語句,在那里肯定有一個(gè)switch語句的條件之一是菜單命令“Exit”的(IDM_EXIT),現(xiàn)在我們?yōu)槲覀兊男聦?duì)話框添加一個(gè)新的case條件,輸入如下代碼:

case IDM_ABOUT:
    DialogBox (hInst, MAKEINTRESOURCE(DGL_ABOUT), hwnd, AboutDlgProc);
    break;

    我們還需要編寫對(duì)話框函數(shù)。

BOOL CALLBACK AboutDlgProc (HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
  switch (msg)
  {
    case WM_COMMAND:
      if (LOWORD(wParam) == IDOK)
      {
        EndDialog(hwnd,0);
        return TRUE;
      }
      break;
  }
  return FALSE;
}

    你應(yīng)該已經(jīng)明白了,由向?qū)砩纱a要簡單得多!現(xiàn)在編譯、鏈接這個(gè)程序,然后運(yùn)行它,選擇“Compiler”中的“Execute prj.exe”項(xiàng),我們創(chuàng)建的對(duì)話框?qū)@示在屏幕上了。

 

添加其它類型的資源
    你還需要知道如何添加其它資源,如圖標(biāo)等。
    事實(shí)上WeditRes還不能編輯圖標(biāo)文件,作者說正在做這方面的工作。所以你可能要使用其它的工具來完成圖標(biāo)編輯的工作。

    在資源創(chuàng)建完后,你要把它添加到工程的資源描述文件里面去。如果你是使用向?qū)?chuàng)建的工程。你只須要打開與工程名相同的*.RC文件就可以了。

    如果你沒有使用向?qū)?,那么你只能新?chuàng)建一個(gè)RC文件。如果你是使用WeditRes創(chuàng)建的資源,在建立資源描述文件時(shí)有些事情是你必須知道的——必須包含WeditRes資源,甚至于你并沒有使用任何由WeditRes創(chuàng)建的資源,你完全有可能在后續(xù)的工作中用到,我建議無論什么情況都應(yīng)該象下面這樣做。

    WeditRes一般要建立三個(gè)文件:一個(gè)*.DLG文件、一個(gè)*.H頭文件和一個(gè)*.RES二進(jìn)制資源文件。DLG文件描述了由WeditRes創(chuàng)建的資源的定義(如:資源串、菜單和對(duì)話框等),H文件是所有資源的符號(hào)名的定義,RES文件是編譯后的二進(jìn)制資源文件,這個(gè)文件將被鏈接到工程最后生成的可執(zhí)行程序中。

    資源描述文件(*.RC)的文件名一定要和RES文件的文件名相同,當(dāng)Lcc-Win32的資源編譯器(lrc.exe)編譯資源時(shí)將覆蓋原來的RES文件。你可以在Wedit中創(chuàng)建資源描述文件,如下:

#include <windows.h>
#include "resources.h"
#include "resources.dlg"

    第一行用來包含標(biāo)準(zhǔn)的Windows頭函數(shù),在這個(gè)頭函數(shù)中定義了資源編譯器需要的信息。

    第二行包含由WeditRes產(chǎn)生的資源的符號(hào)名的頭文件,我在這里假定你的資源工程名為“resurces”,可以改為你所定義的名稱。第三行是WeditRes產(chǎn)生的資源描述文件,這樣不會(huì)丟失你已經(jīng)創(chuàng)建了的資源。

    下面你可以向資源描述文件中增加資源,下面是一個(gè)例子:

IDI_MYICON ICON myiconfile.ico

    這一行定義了圖標(biāo)資源,在使用前,一定要定義圖標(biāo)的符號(hào)名。比如在“prjwiz.h”文件(或者“resource.h”,如果你沒有使用向?qū)В┲?,如果你沒有定義這個(gè)符號(hào)名,那么編譯器將認(rèn)為它是一個(gè)字符串名。

    添加光標(biāo)或者位圖資源的步驟是相同的,只要把關(guān)鍵字改為“BITMAP”或者
“CURSOR”。

    下面要做的是把資源描述文件包含在工程文件列表中,當(dāng)下一次你編譯工程,資源編譯器也將編譯這個(gè)資源描述文件,并把產(chǎn)生的二進(jìn)制資源鏈接到執(zhí)行文件內(nèi)。

    這樣你可以添加圖標(biāo)、光標(biāo)和位圖資源,對(duì)于其它類型的資源可以使用RCDATA資源方式添加到資源文件內(nèi),就是一系列的由逗號(hào)分隔的數(shù)值信息,這種方式可以使Lcc-Win32的資源編譯器不支持的資源得以添加到資源文件中去,比如WAV文件等。

 

使用非規(guī)格資源
    Lcc-win32的資源編譯器可以使用各種類型的資源,如對(duì)話框、菜單、圖標(biāo)等,但是它不能使用其它非規(guī)格的資源如多媒體文件(WAV,MID等等)。
    你可能認(rèn)為使用其它的資源編譯器如微軟在Win32 SDK中提供的資源編譯器,或者其它的什么東西。

    但是這里的麻煩事是LCCLINK,因?yàn)樗⒉徽J(rèn)識(shí)這些資源,因此也不可能把這些資源鏈接到你的執(zhí)行文件中去,這和真是個(gè)大問題,你可能不得不使用其它的鏈接器,這意味著可能需要其它類性的入口庫。

    我認(rèn)為這樣做不是一個(gè)好的解決方案,主要的原因是Wedit不是設(shè)計(jì)成可以使用其它的鏈接器的,你將不得不在命令行下編譯你的程序,放棄了Lcc-Win32 IDE提供的全部優(yōu)點(diǎn)。

    但是這里還是有一個(gè)可供選擇的方案,——幸運(yùn)的是LRC支持RCDATA資源類型,這種資源類型用來包含二進(jìn)制數(shù)據(jù)類型的資源,使用一系列的數(shù)字列表表示。

    下面是具體的實(shí)現(xiàn)方法:

    首先你需要轉(zhuǎn)換你要使用的二進(jìn)制文件到有一系列的有逗號(hào)分割數(shù)值表示的文本文件,LRC缺省的認(rèn)為這些數(shù)據(jù)是16位長的,它同時(shí)也支持32位長度的整數(shù),只要在數(shù)值后添加“L”字符就可以了。

    你可以從這里下載做這些工作的轉(zhuǎn)換器:

Bin2Txt: 開發(fā)者:Josef Planeta. 十分的靈活方便;
TextIt: 本文作者開發(fā),可以一次轉(zhuǎn)換多個(gè)文件。
    這兩個(gè)工具都帶有源碼,使用Lcc-Win32開發(fā)。

    然后一定要在資源數(shù)據(jù)中包含這些整數(shù)列表,如果你的資源文件沒有使用資源描述文件,如果你沒有使用向?qū)晒こ?,這是有很大可能的。你一定要建立一個(gè)資源描述文件,一般是這個(gè)樣子的:

#include <windows.h> //basic Windows header file
#include "resources.h" //resource identifiers (generated by WeditRes)
#include "resources.dlg" //resource scripts (generated by WeditRes)

MySound RCDATA
BEGIN
#include "mysound.txt"
END

    在這個(gè)例子中,我們包含了一個(gè)叫做“mysound.txt”的文件,這個(gè)文件是由一個(gè)WAV文件轉(zhuǎn)換成的數(shù)據(jù)文件。

    要注意當(dāng)前版本的LRC(V981126)在RCDATA資源的大小上是有限制的,如果任何一個(gè)數(shù)據(jù)文件大于70Kb,你有可能得到一個(gè)溢出信息(Overflow in resource data),在未來的版本中可能會(huì)有所改進(jìn),但是在目前如果出現(xiàn)了這種情況可能只有使用其它的資源編譯器了。

    使用RCDATA類型定義資源意味著你不能直接的指定PlaySound來播放這些資源,因?yàn)轭愋褪遣煌摹?

    解決辦法是手工把這些數(shù)據(jù)讀入內(nèi)存,下面的代碼說明了在PlaySound時(shí)要做的事情:

BOOL PlayRcSound (HINSTANCE hInst, LPCTSTR lpszSndName)
{
  HRSRC hr;
  HGLOBAL hg;
  LPVOID lpSndData;

  hr = FindResource (hInst, lpszSndName, RT_RCDATA);
  if (hr != NULL)
  {
    hg = LoadResource (hInst, hr);
    if (hg != NULL)
    {
      lpSndData = LockResource (hg);
      if (lpSndData != NULL)
      {
        return PlaySound((LPCTSTR)lpSndData, NULL, SND_MEMORY);
        /* We do not need to unlock or unload the resource, */
        /* Windows will take care of this */
      }
    }
  }
  return FALSE;
}

    如果你的資源在頭文件中定義有標(biāo)識(shí)符,叫做:ID_MYSOUND,那么調(diào)用函數(shù)的方式應(yīng)該是:


PlayRcSound (hInst, MAKEINTRESOURCE(ID_MYSOUND));

    另外,如果你給出了一個(gè)字符串名,比如:MySound,函數(shù)調(diào)用如下所示:


PlayRcSound (hInst, "MySound");

 

靜態(tài)庫和動(dòng)態(tài)庫
    也許程序員就是喜歡比喻以類的修辭的,庫的概念就是一個(gè)例子,它是用來存儲(chǔ)可能在許多的程序中使用的代碼,或者一部分十分專業(yè)的代碼,只要寫一次就可以了,甚至是由其他的人為你寫的代碼,這樣使用這些代碼而完全不用關(guān)心具體的實(shí)現(xiàn)細(xì)節(jié)。
    和其它的Windows編譯器一樣,LCC-Win32也支持兩種庫——?jiǎng)討B(tài)庫和靜態(tài)庫。

    靜態(tài)庫包含的代碼在編譯鏈接時(shí)將被添加在可執(zhí)行文件中,它被稱為“靜態(tài)”庫是因?yàn)橐坏┧溄拥娇蓤?zhí)行文件中,就將不可改變(除非重新編譯整個(gè)程序)。

    而動(dòng)態(tài)鏈接庫不會(huì)由編譯器鏈接到可執(zhí)行文件中,而是在運(yùn)行時(shí)由操作系統(tǒng)鏈接的,這樣即使你改變了這個(gè)庫,也不會(huì)使整個(gè)可執(zhí)行程序重新編譯。

    靜態(tài)庫的編寫要簡單些,只要?jiǎng)?chuàng)建一個(gè)類型為“Static library (lib)”的新工程,添加你要在這個(gè)靜態(tài)庫中使用的原始資料——函數(shù)、數(shù)據(jù)等等,編譯后就會(huì)得到一個(gè)LIB文件,這個(gè)文件里面包括了所有你指定的函數(shù)和數(shù)據(jù)。如果你要使用這些函數(shù)或者數(shù)據(jù),在“Configuration”對(duì)話框中的“Linker”表里的“Additional libraries”項(xiàng)中指定靜態(tài)庫名稱,通知編譯器把這個(gè)靜態(tài)庫鏈接到工程里去,但是千萬不要忘了把你的靜態(tài)庫放到鏈接器能夠找到的地方,比如:“\lcc\lib”路徑下。

    動(dòng)態(tài)鏈接庫就有些麻煩了,你要使用兩個(gè)文件而不是一個(gè)文件:動(dòng)態(tài)庫本身——DLL文件和關(guān)聯(lián)入口庫——LIB文件。入口庫是給鏈接器使用的,簡單的說它使用來哄騙鏈接器的,同時(shí)它也包含了使Windows正確的調(diào)用相應(yīng)動(dòng)態(tài)庫中的函數(shù)的信息。

    而且,動(dòng)態(tài)庫的功能可以更加的強(qiáng)大,它有一個(gè)LibMain()函數(shù),在程序每一次調(diào)用它時(shí)都要通過它來進(jìn)行初始化的工作。

    要?jiǎng)?chuàng)建一個(gè)動(dòng)態(tài)鏈接庫,你要?jiǎng)?chuàng)建一個(gè)DLL工程,然后你可以使用向?qū)蒐ibMain()函數(shù)。添加你要使用的函數(shù)和數(shù)據(jù),在編譯這個(gè)工程后,你就可以得到DLL庫和接口庫文件。

    如果要使用動(dòng)態(tài)鏈接庫,象使用靜態(tài)庫一樣,要將接口庫放在“\lcc\lib”路徑下,在“Options”對(duì)話框中添加這個(gè)接口庫。同時(shí)也要把DLL文件放置在Windows能夠搜索到的路徑下,Windows搜索動(dòng)態(tài)鏈接庫的缺省目錄是“\windows\system\”和應(yīng)用程序的起始目錄,將動(dòng)態(tài)鏈接庫放置在這兩個(gè)目錄下都是可以的。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    精品视频一区二区三区不卡| 国产在线观看不卡一区二区| 国产又大又硬又粗又黄| 三级理论午夜福利在线看| 日本精品视频一二三区| 四季av一区二区播放| 成人三级视频在线观看不卡| 不卡免费成人日韩精品| 激情综合五月开心久久| 中文久久乱码一区二区| 亚洲日本中文字幕视频在线观看 | 日本深夜福利视频在线| 在线精品首页中文字幕亚洲| 好吊色免费在线观看视频| 国产精品刮毛视频不卡| 神马午夜福利免费视频| 青青操成人免费在线视频| 欧美视频在线观看一区| 女人精品内射国产99| 欧美一级内射一色桃子| 亚洲精品国产美女久久久99| 国产av熟女一区二区三区蜜桃| 免费高清欧美一区二区视频| 国产午夜福利一区二区| 亚洲一二三四区免费视频| 五月婷婷综合缴情六月| 国内自拍偷拍福利视频| 欧美偷拍一区二区三区四区| 亚洲黄色在线观看免费高清| 青青操成人免费在线视频| 亚洲精品一区三区三区| 欧美日韩亚洲国产综合网| 亚洲男人的天堂色偷偷| 一本久道久久综合中文字幕| 国产又大又黄又粗又免费| 国产成人精品午夜福利av免费| 欧美在线视频一区观看| 国产一区国产二区在线视频| 内射精品欧美一区二区三区久久久| 欧美黑人暴力猛交精品| 国产日韩中文视频一区|