收藏 分享(赏)

LCC使用介绍.doc

上传人:gnk289057 文档编号:7775895 上传时间:2019-05-25 格式:DOC 页数:15 大小:77KB
下载 相关 举报
LCC使用介绍.doc_第1页
第1页 / 共15页
LCC使用介绍.doc_第2页
第2页 / 共15页
LCC使用介绍.doc_第3页
第3页 / 共15页
LCC使用介绍.doc_第4页
第4页 / 共15页
LCC使用介绍.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、LCC 使用介绍请添加出处:http:/ Daniel Guerrero Miralles翻译:pigprinc声明本文没有任何明确的或者含蓄的表达说明本文是完全正确的,对于应用本文内容所产生的任何结果,本人概不负责。请原谅本文在语言和语法的的运用上的错误,本人才疏学浅,这是不可避免的。如果有什么你觉得不舒服的地方请联系 pigprince,先谢谢了_LCC-Win32介绍LCC-Win32原来是一个免费的开放源代码 WIN32编译器,包含一个很好用的 IDE,用起来很爽,但是最近源码开始要付费的了(40美圆) 。详情请见 LCC-Win32官方网站。它的免费版本可以在国内得到,到云风工作室看

2、一下,你会有所收获。目录* 简介* 编译器的安装* Lcc-Win32的一些基本概念* 写个小程序!* 使用工程管理* 第一个 Windows 程序* 程序生成向导* 使用 WeditRes 创建资源* 添加其它类型的资源* 使用非规格资源* 静态库和动态库简介其实所谓的简介这个部分的内容趋向取决于作者。但是我所读过的一些指南都是由一个“简介”开始的,这部分的内容通常都是在重复读者会在下面看到的东西,但是也有的简介只是作者的一些想法。仔细的想一下,其实这个介绍并不是一件简单的事情。首先,如果你要是开门见山的直奔主题,这是不礼貌的,而且基于 web 的指南也不应该有超大个的简介,不应该让读者在这

3、个东西上浪费时间和金钱。看来我的废话也够多的了,让我们切入正题。这个指南是单页的,建议你等浏览器下载完毕后保存一份拷贝来离线阅读。编译器的安装编译器的安装简单极了,只要把您下载的文件运行一下就 OK 了,应该不会遇到什么问题。但是注意安装的最后要编译库文件,可能要花点时间,要视你的机器速度而定。Lcc-Win32的一些基本概念Lcc-Win32编译系统是由多个文件构成的。它们的共同的任务是把文本格式的源代码编译位可以运行的二进制格式。优良个重要的文件分别是编译器(lcc.exe)和连接器(lcclnk.exe) 。编译器是用来把你编写的文本翻译成处理器可以执行的格式的程序。连接器用来转换编译器

4、生成的二进制文件(通常叫做目标文件) ,并添加操作系统用来把程序调入内存并执行所需要的信息它可以把多个目标文件链接为一个单独的程可执行程序,这样就可以使你可以把一个程序的代码文档分割为几个模块,这个能力在你开发大型程序时是很重要的。虽然这些听起来好像十分的简单,但是实际上并不是这个样子的。编辑器和链接器需要你在命令行方式下键入你要建立的程序的所有信息,这将需要你记住大量的命令行参数和各种各样的开关,这时就需要 IDE集成开发环境( wedit.exe)来提供方便了。IDE 的基本功能是编辑文本,你可以在这个环境里编辑程序的源代码,但是远远不止有这个功能。它还给你提供了一个调用编译器和链接器的简

5、单方法,这样在编译程序的时候你就不用去记住那么多的命令行参数了。你可以简单的把 Wedit 想象成你的控制台,在这里你可以控制所有的流程。好吧!现在你可以用你的鼠标点一下 Windows 的“开始 ”按钮,在程序项的子菜单了寻找“lcc-win32”,好了吗?现在你已经准备好在 Lcc-Win32中写你的第一个程序了。写个小程序!你知道吗?自从第一个 C 编译器产生以来(也许可能更早一些) ,有一个惯例就是为这个编译器写的第一个程序是“Hello World”,我为我拥有的所有编译器都写过,现在我们就来写一个。第一步是创建源码文件。在“File”菜单中选择“new ”项,然后在出现的对话框中输

6、入“hello.c”并点一下“OK” 。现在你看到的是一个标题为“hello.c ”的空白窗口,输入下面的代码:#include void main (void)printf (“Hello World from LCC-Win32!n“);保存我们的小程序,在“File”菜单中选择“Save”项。现在我们可以编译这个程序了。选择“Compiler”菜单中的 “Compile hello.c”调用编译器。这时一个新窗口会出现在 IDE 的底部,这是信息窗口,当编译器处理完成,在这个窗口中将会显示“HELLO.exe build successfully.”,如果编译出错,出错信息也将会被显示在

7、这里。如果编译出错了,在信息窗口处双击信息显示所在行,在编辑窗口内将高亮度显示出错代码行,仔细的检查一下你写的程序和上面我写的一样,这里需要注意的是 C 语言是大小写敏感的程序语言,这意味着“printf ”和“Printf”对编译器是不相同。现在你已经编译好了这个程序,按Ctrl+F5键运行一下,结果对吗?使用工程管理现在你已经编译了你的第一个程序,你可能想知道执行文件在哪里?回答是:我也不知道!这可能听起来很傻(的确也是) ,但是这是看你在编译程序时的缺省目录是什么,所以你应该在你的硬盘里搜索一个叫做“hello.exe”的文件。你肯定不会想要每开发一个程序都要搜索一下硬盘的,这种情况下你

8、就要使用工程。工程是一些编译器要知晓的建立程序所需要的信息。这包括程序源文件、编译好的文件的存放地点、要编译为什么类型的可执行文件,一个好的想法是为每一个程序建立一个工程。事实上,对于我们的“HelloWorld”程序还是有一个工程的,Lcc=Win32会为没有指明工程的程序建立一个缺省的工程。选择“Project ”菜单的“Erase.”项,Wedit会显示一个工程列表,你会看到一个项目叫做“HELLO”,现在我们毫不留情的删除它。与其他的编译器不同的是,Lcc-Win32 的工程信息不是存储在硬盘上的,而是存储在 Windows 的注册表项里。这使得 Wedit 可以“ 记住”所有的工程,

9、甚至于在不同的磁盘上。但是优势我们也需要清除我们不再使用的工程,在这种情况下,我们可以把工程信息导出到磁盘上,然后在 IDE 中删除它。看一下“Project”菜单的选项,你就会明白了。现在你可以试着创建一个“HELLO”工程。第一个 Windows 程序你可能已经注意到了 hello.exe 看起来象是一个 DOS 程序,但是它不是的,它是一个真正 Windows 程序,但是这种类型的程序被称为 Windows 控制台程序, 就是在文本模式下运行的 Windows 程序。如果你不相信,可以试着在 Windows 的纯 DOS 环境下运行一下,你会得到一行信息:“This program ca

10、nnot be run in DOS mode”。写一个真正的 Windows 版的 “HelloWorld”程序并不比控制台的版本难多少。首先创建一个新工程,选择“Windows executable”代替“Console application”,点 OK后,Lcc-Win32会问你需要 Wizard(生成向导)创建程序框架吗,回答 No。#include int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)MessageBox (NULL, “Hell

11、o world from Lcc-Win32!“, “Hello“, MB_OK);return 0;编译并运行这个程序,你会看到一个显示 hello 信息的窗口,点 ok 关闭退出。不幸的是,除了这样的小之又小的 Windows 程序,一般情况下 Windows 程序是很复杂的,现在你已经知道了如何创建工程和编译程序,如果你是一个 Windows 编程新手,去找一些有关的书来看看,取得必要的基础,一些 Windows 编程知识在下面的部分是必须的。如果你是一个 C 语言的新手,那么先好好的学一段时间再来看这个指南吧!程序生成向导Windows 程序与文本状态下的程序比起来要好的多,但是天上不

12、会掉馅饼的,你想要得到的 Windows 功能支持,比如:剪裁板、多任务等等要付出的是大量的复杂的代码。但是总还是有些办法可以使事情变得简单一些的。长时间以来,程序员们发现实际上总是有些在每个程序中都相同的代码段,所以 Windows 程序员通常使用模板来生成这部分代码。就是说源文件一般只要生成一次,就可以在任何一个新程序中使用了。只有变化的部分才是每个程序不同的部分,显然这些应该是可以自动的进行的。这就是生成向导要完成的工作。你可以在它的帮助下快速的生成应用程序的框架。这个框架事实上就是一个什么功能也没有的一个完整的程序,也许可能只是用来显示一个空窗体,因为使程序完成具体的功能是你的工作。让

13、我们看一下使用向导建立最简单的应用程序的处理。通常,第一步是创建程序代码,然后建立一个工程。在使用向导的模式下,你并不需要写一行代码,向导将为你建立它,我们直接来看建立工程各个步骤。在“Project”菜单下选择“create”项,给出项目名称和路径,选择工程类型为“Windows executable”,当 Wedit 询问你是否要使用向导(wizard) ,回答“ yes”,这样就进入了向导模式。向导将显示一个对话框叫做:“Application characteristics”,这是向导将在应用程序中包含的基本特点,你可以选择以下情况的一种:单窗口、多窗口和 DLL(动态链接库) ,现在

14、我们要创建一个十分简单的单窗口小应用程序,选择单窗口类型并确保所有的特性复选按纽都未被选中,点击“OK ”进行处理。现在向导将要提示你输入信息设置主窗口的“类”,这里所说的“类”和 C+中的类是不同的,它是 Windows 在内存中存储的一个结构,用来存储正确显示窗口所需要的信息。最重要的是“回叫函数”(下面将具体介绍)的名称,现在只要简单接受默认的属性值,点击“NEXT” 进行处理。这个“Generate code for the main window creation”对话框用来设定相应窗口的信息。当主窗体被创建的时候这些信息会被传送到相应的窗口。在这里你可以改变窗口的标题栏的显示内容,

15、然后点击“Finish”。向导的工作就要完成了,接下来的工程创建工作是通常的一些对编译器、链接器、调试器的一些设置,这里只要简单的接受缺省的选项就可以了。经过上面的步骤,就完成了向导的所有的工作,你可以在 IDE 中看到两个窗口,一个是源程序编辑窗,另外的一个是用来定义应用程序的主菜单的脚本。正象刚刚所说的那样,这个程序框架是全功能的,可以通过编译并运行,你可以看到一个有菜单的窗口。唯一可以进行的操作是“File”菜单的“Exit” 项,你可以使用这个菜单项关闭这个简单的窗口,也可以使用Ctrl+Q完成同样的操作。现在你可以看一下这个程序的源代码,你会注意到这个程序比那个“Hello Worl

16、d!”程序复杂了许多,我可以告诉你一个小窍门从源代码的结尾开始读起,因为通常那里才是一些功能函数的所在。使用 WeditRes 创建资源在 Windows 程序的开发中,资源是十分重要的部分,菜单、对话框和其它的一些用户接口部分都是可以象写程序一样的编写的,可以简单的作为资源包含进程序中。如果 Lcc-Win32没有提供一个资源编辑器那么 Lcc-Win32将不是一个完整的 Win32编译程序,Lcc-Win32提供的资源编辑器叫做 WeditRes,是在“lccbin”路径下。的确,WeditRes 还是在不断的完善的过程中,也就是说还没有开发完成。不过它已经可以编辑一些手工编辑难以完成的资

17、源了,比如:菜单和对话框等等。在 IDE 下调用WeditRes,在“Compiler”菜单下选择“Resources”项。如果你正在开发的程序是用向导生成的,那么向导会产生一个资源文件,在这个文件里至少包括菜单资源,WeditRes 会打开这个资源文件,但是它不会找到相应的头文件,你应该为它指明头文件的路径。通常是在 WeditRes 当前工作路径的上一级目录。WeditRes 要找的文件通常叫做 prjnamewiz.h,这里的 prjname 是你指定的工程的名称。经过这一步就可以修改工程所用的资源了。如果你的程序不是由向导生成的,那么 WeditRes 会提示你输入资源文件的文件名,输

18、入一个名称后点击“OK”,这时 WeditRes 会说不能打开这个资源文件,没有关系,这是因为这个目录下的确是没有资源文件的,还是在这个对话框中点击“OK”,然后在“File”菜单中选择“ New”项,这样就会为你的工程创建一个新的资源工程,键入一个工程名,一般情况是和应用程序的工程名相同,然后点击“Validate”,现在你需要手工在应用程序工程列表里添加这个资源文件(一般以“RES”为扩展名) 。在这里试举一例我们来为我们上面创建的程序创建一个“关于”对话框资源。运行 WeditRes,输入头文件的路径后选择 “Objects”菜单的“New dialog”项,这时 WeditRes 会显

19、示一个对话框,标题栏为 “Dialog box parameters”,改变对话框的标题为“About this application”或者随便其它的什么东西,然后在 “Identity”(标识符)项键入一个你喜欢的东西,比如:“DLG_ABOUT”,在“standard buttons”选单中选择“Validate ”选项并点击“OK”关闭对话框。你在这个时候应该可以看到一个新的对话框和一个浮动的工具条,在对话框中也应该有一个按纽,你可以用鼠标拖动它来重新指定它的位置,如果你还想改变按纽上显示的文字双击它打开属性对话框,或者先选定它,然后在浮动工具条下改变显示文字。下面我们添加一个静态文本

20、标签,在工具条上选择文本工具,光标形状变成由一个矩形包围的指针,在对话框的窗体上点击一下,一个包含文本“Text”的矩形会出现在你点击的地方,可以通过鼠标拖动来改变这个文本框的大小,同样也可以改变显示的文本和文本框的位置。我们还可以在这个对话框中添加其它的装置。空心方框、实心方框和组件盒等可以对这个对话框进行一些简单的装饰。如果你想要删除一个装置,选定它然后按Ctrl + X,或者选择“ Edit”菜单的“Cut ”项。还可以选择 “Options”菜单的“Test”项测试这个对话框的外观。在工具栏里有一个按纽的功能是相同的,就是看起来象一个开关的那个,如果想要继续编辑这个对话框,只要再次选择

21、上述选项一次即可。编辑完成后在“File ”菜单中选择存盘,然后关闭 WeditRes,为了显示这个对话框下面我们必须在程序中包含相应的代码。寻找“OnCommand ”语句,在那里肯定有一个 switch 语句的条件之一是菜单命令“Exit”的(IDM_EXIT ),现在我们为我们的新对话框添加一个新的 case 条件,输入如下代码:case IDM_ABOUT:DialogBox (hInst, MAKEINTRESOURCE(DGL_ABOUT), hwnd, AboutDlgProc);break;我们还需要编写对话框函数。BOOL CALLBACK AboutDlgProc (HWN

22、D hwnd,UINT msg,WPARAM wParam,LPARAM lParam)switch (msg)case WM_COMMAND:if (LOWORD(wParam) = IDOK)EndDialog(hwnd,0);return TRUE;break;return FALSE;你应该已经明白了,由向导来生成代码要简单得多!现在编译、链接这个程序,然后运行它,选择“Compiler” 中的 “Execute prj.exe”项,我们创建的对话框将显示在屏幕上了。添加其它类型的资源你还需要知道如何添加其它资源,如图标等。事实上 WeditRes 还不能编辑图标文件,作者说正在做这方

23、面的工作。所以你可能要使用其它的工具来完成图标编辑的工作。在资源创建完后,你要把它添加到工程的资源描述文件里面去。如果你是使用向导创建的工程。你只须要打开与工程名相同的*.RC 文件就可以了。如果你没有使用向导,那么你只能新创建一个 RC 文件。如果你是使用 WeditRes 创建的资源,在建立资源描述文件时有些事情是你必须知道的必须包含 WeditRes 资源,甚至于你并没有使用任何由 WeditRes 创建的资源,你完全有可能在后续的工作中用到,我建议无论什么情况都应该象下面这样做。WeditRes 一般要建立三个文件:一个 *.DLG 文件、一个*.H 头文件和一个*.RES 二进制资源

24、文件。DLG 文件描述了由 WeditRes 创建的资源的定义(如:资源串、菜单和对话框等) ,H 文件是所有资源的符号名的定义,RES 文件是编译后的二进制资源文件,这个文件将被链接到工程最后生成的可执行程序中。资源描述文件(*.RC)的文件名一定要和 RES 文件的文件名相同,当 Lcc-Win32的资源编译器(lrc.exe)编译资源时将覆盖原来的 RES 文件。你可以在 Wedit 中创建资源描述文件,如下:#include #include “resources.h“#include “resources.dlg“息。第二行包含由 WeditRes 产生的资源的符号名的头文件,我在这

25、里假定你的资源工程名为“resurces”,可以改为你所定义的名称。第三行是 WeditRes 产生的资源描述文件,这样不会丢失你已经创建了的资源。下面你可以向资源描述文件中增加资源,下面是一个例子:IDI_MYICON ICON myiconfile.ico这一行定义了图标资源,在使用前,一定要定义图标的符号名。比如在“prjwiz.h ”文件(或者“resource.h”,如果你没有使用向导)中,如果你没有定义这个符号名,那么编译器将认为它是一个字符串名。添加光标或者位图资源的步骤是相同的,只要把关键字改为“BITMAP”或者“CURSOR”。下面要做的是把资源描述文件包含在工程文件列表中

26、,当下一次你编译工程,资源编译器也将编译这个资源描述文件,并把产生的二进制资源链接到执行文件内。这样你可以添加图标、光标和位图资源,对于其它类型的资源可以使用 RCDATA 资源方式添加到资源文件内,就是一系列的由逗号分隔的数值信息,这种方式可以使 Lcc-Win32的资源编译器不支持的资源得以添加到资源文件中去,比如 WAV 文件等。使用非规格资源Lcc-win32的资源编译器可以使用各种类型的资源,如对话框、菜单、图标等,但是它不能使用其它非规格的资源如多媒体文件(WAV,MID 等等) 。你可能认为使用其它的资源编译器如微软在 Win32 SDK 中提供的资源编译器,或者其它的什么东西。

27、但是这里的麻烦事是 LCCLINK,因为它并不认识这些资源,因此也不可能把这些资源链接到你的执行文件中去,这和真是个大问题,你可能不得不使用其它的链接器,这意味着可能需要其它类性的入口库。我认为这样做不是一个好的解决方案,主要的原因是 Wedit 不是设计成可以使用其它的链接器的,你将不得不在命令行下编译你的程序,放弃了 Lcc-Win32 IDE 提供的全部优点。但是这里还是有一个可供选择的方案,幸运的是 LRC 支持 RCDATA 资源类型,这种资源类型用来包含二进制数据类型的资源,使用一系列的数字列表表示。下面是具体的实现方法:首先你需要转换你要使用的二进制文件到有一系列的有逗号分割数值

28、表示的文本文件,LRC 缺省的认为这些数据是16位长的,它同时也支持32 位长度的整数,只要在数值后添加“L”字符就可以了。你可以从这里下栽做这些工作的转换器:* Bin2Txt: 开发者: Josef Planeta. 十分的灵活方便;* TextIt: 本文作者开发,可以一次转换多个文件。这两个工具都带有源码,使用 Lcc-Win32开发。然后一定要在资源数据中包含这些整数列表,如果你的资源文件没有使用资源描述文件,如果你没有使用向导生成工程,这是有很大可能的。你一定要建立一个资源描述文件,一般是这个样子的:#include /basic Windows header file#inclu

29、de “resources.h“ /resource identifiers (generated by WeditRes)#include “resources.dlg“ /resource scripts (generated by WeditRes)MySound RCDATABEGIN#include “mysound.txt“END在这个例子中,我们包含了一个叫做“mysound.txt ”的文件,这个文件是由一个WAV 文件转换成的数据文件。要注意当前版本的 LRC(V981126)在 RCDATA 资源的大小上是有限制的,如果任何一个数据文件大于70Kb,你有可能得到一个溢出信息

30、(Overflow in resource data) ,在未来的版本中可能会有所改进,但是在目前如果出现了这种情况可能只有使用其它的资源编译器了。使用 RCDATA 类型定义资源意味着你不能直接的指定 PlaySound 来播放这些资源,因为类型是不同的。解决办法是手工把这些数据读入内存,下面的代码说明了在 PlaySound 时要做的事情:BOOL PlayRcSound (HINSTANCE hInst, LPCTSTR lpszSndName)HRSRC hr;HGLOBAL hg;LPVOID lpSndData;hr = FindResource (hInst, lpszSndNa

31、me, 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;如果你的资源在头文件中定义有标识符

32、,叫做:ID_MYSOUND ,那么调用函数的方式应该是:PlayRcSound (hInst, MAKEINTRESOURCE(ID_MYSOUND);另外,如果你给出了一个字符串名,比如:MySound,函数调用如下所示:PlayRcSound (hInst, “MySound“);静态库和动态库也许程序员就是喜欢比喻以类的修辞的,库的概念就是一个例子,它是用来存储可能在许多的程序中使用的代码,或者一部分十分专业的代码,只要写一次就可以了,甚至是由其他的人为你写的代码,这样使用这些代码而完全不用关心具体的实现细节。和其它的 Windows 编译器一样, LCC-Win32也支持两种库动态库

33、和静态库。静态库包含的代码在编译链接时将被添加在可执行文件中,它被称为“静态”库是因为一旦它链接到可执行文件中,就将不可改变(除非重新编译整个程序) 。而动态链接库不会由编译器链接到可执行文件中,而是在运行时由操作系统链接的,这样即使你改变了这个库,也不会使整个可执行程序重新编译。静态库的编写要简单些,只要创建一个类型为“Static library (lib)”的新工程,添加你要在这个静态库中使用的原始资料函数、数据等等,编译后就会得到一个LIB 文件,这个文件里面包括了所有你指定的函数和数据。如果你要使用这些函数或者数据,在“Configuration ”对话框中的 “Linker”表里的

34、“Additional libraries”项中指定静态库名称,通知编译器把这个静态库链接到工程里去,但是千万不要忘了把你的静态库放到链接器能够找到的地方,比如:“lcclib ”路径下。动态链接库就有些麻烦了,你要使用两个文件而不是一个文件:动态库本身DLL文件和关联入口库LIB 文件。入口库是给链接器使用的,简单的说它使用来哄骗链接器的,同时它也包含了使 Windows 正确的调用相应动态库中的函数的信息。而且,动态库的功能可以更加的强大,它有一个 LibMain()函数,在程序每一次调用它时都要通过它来进行初始化的工作。要创建一个动态链接库,你要创建一个 DLL 工程,然后你可以使用向导生成 LibMain()函数。添加你要使用的函数和数据,在编译这个工程后,你就可以得到 DLL 库和接口库文件。如果要使用动态链接库,象使用静态库一样,要将接口库放在“lcclib” 路径下,在“Options”对话框中添加这个接口库。同时也要把 DLL 文件放置在 Windows 能够搜索到的路径下,Windows 搜索动态链接库的缺省目录是 “windowssystem”和应用程序的起始目录,将动态链接库放置在这两个目录下都是可以的。 作者:Miralles 更新日期:2004-12-23 来源:internet

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报