MicroStation开发语言(MDL)应用教程(第二章)

开发环境变量&nbsp
 &nbsp
 &nbsp
MDL开发环境使用一些变量来定义各种环境参数(表1-1)。&nbsp
表1-1、MDL开发环境变量列表&nbsp
变量&nbsp
描述&nbsp
类型&nbsp
缺省值&nbsp
MS&nbsp
MicroStation系统目录&nbsp
环境变量&nbsp
 &nbsp
MDL_COMP&nbsp
mcomp和rsctype的命令行参数&nbsp
环境变量&nbsp
-I%MS%&nbsp
RSC_COMP&nbsp
rcomp的命令行参数&nbsp
环境变量&nbsp
-I%MS%&nbsp
BMAKE_OP&nbsp
bmake的命令行参数&nbsp
环境变量&nbsp
-I%MS%&nbsp
MS_MDL&nbsp
搜寻MDL应用的路径&nbsp
配置变量&nbsp
 &nbsp
MS_MDLAPPS&nbsp
在MDL对话框中列出的应用程序&nbsp
配置变量&nbsp
 &nbsp
 &nbsp
在DOS和Windows&nbspNT操作系统中,环境变量可以在AUTOEXEC.BAT中设置,同时需要在其中设置的还有MicroStation系统路径。用户级别的环境变量设置可以从MicroStation命令窗口中选择User&nbsp–>&nbspWorkspace&nbspoption&nbsp–>&nbspModify&nbspUser&nbspConfiguration&nbspoption菜单(如图2-1所示)激活变量设置对话框(图2-2),在该对话框中选择需要配置的变量进行设置。&nbsp
 &nbsp
图2-1、通过菜单激活变量设置对话框&nbsp
图2-2、变量设置对话框&nbsp
二、MDL应用的结构&nbsp
一个MDL应用由两个主要的部分组成,即程序部分与资源部分。其中程序部分是必须的,而资源部分是可选的。&nbsp
 &nbsp
三、程序代码(Program&nbspCode)&nbsp
程序文件以&nbsp.MC为扩展名,该文件中包含实现各种功能的函数代码。MC文件中的函数可以有如下几种类型:&nbsp
主函数(Main&nbspFunction)&nbsp
 &nbsp
与标准C语言不同,MDL中的主函数可以缺省。主函数通常用于应用程序的初始化,在该应用载入时执行。&nbsp
2、命令处理函数(Command&nbspProcess&nbspFunction)&nbsp
该函数基于用户事件(User&nbspEvents)定义应用程序的执行命令。&nbsp
3、钩子函数(Hook&nbspFunction)&nbsp
这种函数通常与对话框或者对话框中的Item相联系,用于修改和增加其功能。&nbsp
 &nbsp
 &nbsp
 &nbsp
 &nbsp
四、资源代码(Resource&nbspCode)&nbsp
 &nbsp
资源文件以&nbsp.R为扩展名,用于定义应用程序的用户界面部分,以下是几种类型的资源组件。资源文件不是一个MDL应用所必须的。&nbsp
 &nbsp
对话框定义(Dialog&nbspBox&nbspDinfintions)用于定义对话框以及对话框中的元素(Item)。&nbsp
命令表(Command&nbspTables)&nbsp用于映射键入命令到命令处理函数。&nbsp
消息列表(Message&nbspLists)用于存储处理期间的消息及提示信息的文本字符串。&nbsp
 &nbsp
五、头文件(Head&nbspFiles)&nbsp
 &nbsp
头文件以&nbsp.H为扩展名,用于给程序常量设置识别名以及定义将要在多个源码(程序)文件中使用的变量。使用时将头文件包含(Include)到程序文件中。&nbsp
 &nbsp
六、函数声明文件&nbsp
 &nbsp
函数声明文件以&nbsp.FDF为扩展名,用于声明函数原型(prototype)。这有助于减少诸如函数提前引用(即在定义函数之前引用)的编译错误,同时方便了调用函数时的参数检查。MDL使用ANSI&nbspC语言的函数原型声明。在MicroStaion系统目录下的MDL\INCLUDE目录中存放着MDL内部函数的原型声明文件(*.FDF)。&nbsp
 &nbsp
 &nbsp
 &nbsp
七、MDL工具&nbsp
表2-1、MDL工具列表&nbsp
工具&nbsp
描述&nbsp
mcomp&nbsp
MDL源程序编译器(生成目标代码)&nbsp
mlink&nbsp
链接器(链接库文件中的有关目标代码到程序中)&nbsp
mlib&nbsp
对象库管理器(用于维护库文件中的目标代码)&nbsp
rcomp&nbsp
资源编译器&nbsp
rlib&nbsp
资源库管理器(比如把多个资源文件链接到一个资源文件或者程序文件)&nbsp
rsctype&nbsp
类型(Type)生成器&nbsp
(用于生成类型定义以便对话框管理器可以在运行时模拟C表达式)&nbsp
bmake&nbsp
(CLIX&nbsp&&nbspDOS)&nbsp
bmakewin&nbsp
(Windows&nbspNT)&nbsp
MDL应用编译器&nbsp
(用于编译工程文件中指定的应用程序)&nbsp
 &nbsp
 &nbsp
八、MDL&nbspCompiler&nbsp–&nbspmcomp&nbsp
mcomp用于把源程序编译成目标码,即把&nbsp.MC文件编译成&nbsp.MO文件。&nbsp
.MC&nbsp—->&nbsp.MO&nbsp
 &nbsp
l&nbsp语法&nbsp
mcomp&nbsp[-参数1&nbsp-参数2&nbsp…]&nbsp源文件名&nbsp
 &nbsp
l&nbsp参数&nbsp
 &nbsp
-c&nbsp只编译,不联结&nbsp
-g&nbsp生成调试信息&nbsp
-idir&nbsp使用dir目录中的头文件&nbsp
-pi&nbsp显示头文件&nbsp
 &nbsp
l&nbsp编译参数的环境变量设置&nbsp
MDL_COMP环境变量可用于设置mcomp编译命令行参数,以下是DOS&nbsp&&nbspWindows&nbspNT操作系统下autoexec.bat文件中的环境变量设置示范。&nbsp
SET&nbspMDL_COMP=-I\WIN32APP\INGR\USTATION\MDL\INCLUDE&nbsp
 &nbsp
九、MDL&nbspLinker&nbsp–&nbspmlink&nbsp
 &nbsp
mlink用于链接mcomp产生的目标码和编译库,生成应用或程序文件。&nbsp
.MO,&nbsp.ML&nbsp—>&nbsp.MP,&nbsp.MA&nbsp
l&nbsp语法&nbsp
mlink&nbsp[-参数1&nbsp-参数2&nbsp]&nbsp输入文件名&nbsp
l&nbsp参数&nbsp
-afile&nbsp指定输出文件(默认为输入文件名.MA)&nbsp
-g[d|n|o]&nbsp产生调试信息&nbsp
-gd和-g:产生所有可用的调试信息&nbsp
-gn:产生部分调试信息&nbsp
-go:不产生任何调试信息&nbsp
-ssize&nbsp指定MicroStation之外的运行堆栈大小,若未指定,mlink将基于内部算法产生一个默认堆栈大小。&nbsp
 &nbsp
十、MDL&nbspLibarian–&nbspmlib&nbsp
 &nbsp
mlib用于把MDL目标码联结到编译库文件中&nbsp
.MO&nbsp—>&nbsp.ML&nbsp
l&nbsp语法&nbsp
mlib&nbsp命令[v/c]&nbsp库文件&nbsp[输入文件]&nbsp
l&nbsp命令&nbsp
a&nbsp增加object到库&nbsp
d&nbsp从库中删除object&nbsp
t&nbsp显示库文件内容&nbsp
x&nbsp从库中还原object&nbsp
设置参数v将显示较多的信息。&nbsp
如果需要更新库中内容,必须先删除要更新的Object,然后再加入新的Object。&nbsp
十一、Resource&nbspCompiler–&nbsprcomp&nbsp
 &nbsp
rcomp工具用于把资源源文件编译成二进制的资源目标文件。默认的输出文件是&nbsp.RSC文件,对命令表文件,也可为其产生&nbsp.H&nbsp头文件。&nbsp
.R&nbsp—>&nbsp.RSC,&nbsp.H&nbsp
 &nbsp
l&nbsp语法&nbsp
rcomp&nbsp[-参数1&nbsp-参数2&nbsp…&nbsp]&nbsp输入文件&nbsp
l&nbsp参数&nbsp
-h&nbsp产生头文件&nbsp
-idir&nbsp使用dir目录中的头文件&nbsp
-pi&nbsp显示头文件&nbsp
l&nbsp编译参数的环境变量设置&nbsp
RSC_COMP可用于指定编译命令行参数。以下是DOS&nbsp&&nbspWindows&nbspNT操作系统autoexec.bat文件中的环境变量设置示范。&nbsp
SET&nbspRSC_COMP=-I\WIN32APP\INGR\USTATION\MDL\INCLUDE&nbsp
十二、Resource&nbspLibrarian–&nbsprlib&nbsp
 &nbsp
该工具用于联结资源目标代码文件和应用程序文件到一个单一MDL应用或者资源目标代码文件。默认的输出是&nbsp.RSC文件。&nbsp
.RSC,&nbsp.MP&nbsp—>&nbsp.MA&nbsp.RSC&nbsp
l&nbsp语法&nbsp
rlib&nbsp[-参数1&nbsp-参数2&nbsp…]&nbsp输入文件&nbsp
l&nbsp参数&nbsp
-ofile&nbsp指定输出文件(默认为输入文件名.MA)&nbsp
-v&nbsp冗余开关(若指定,将产生较多的输出信息)&nbsp
十三、Type&nbspGenerator&nbsp–&nbsprsctype&nbsp
 &nbsp
该工具用于从包含C类型定义(C&nbsptype&nbspdefinitions)的文件中产生资源源文件。因为对话框管理器不能“理解”结构(structure)以及联合(union)中的数据。所以rsctype工具将分离结构及联合中的数据,并把它们转换存储到资源源文件(.H)中。&nbsp
type.mt&nbsp—>&nbsptype.r&nbsp
 &nbsp
l&nbsp语法&nbsp
rsctype&nbsp[-参数1&nbsp-参数2…]&nbsp输入文件&nbsp
l&nbsp参数&nbsp
-idir&nbsp使用dir目录中的头文件&nbsp
-pi&nbsp显示头文件&nbsp
注意!命名自己的type文件时一定要小心,因为如果不按惯例命名,就有覆盖已有&nbsp.R文件的危险。&nbsp
l&nbsp编译参数的环境变量设置&nbsp
MDL_COMP可用于指定编译命令行参数。以下是DOS&nbsp&&nbspWindows&nbspNT操作系统autoexec.bat文件中的环境变量设置示范。&nbsp
SET&nbspMDL_COMP=-I\WIN32APP\INGR\USTATION\MDL\INCLUDE&nbsp
 &nbsp
 &nbsp
 &nbsp
十四、文件类型&nbsp
 &nbsp
在MDL开发应用过程中的不同阶段,将有不同类型的文件产生或使用到,不同的文件类型通过相应的文件扩展名来区别。&nbsp
 &nbsp
1、创建资源时用到的文件类型&nbsp
表2-2、创建资源时用到的文件类型&nbsp
扩展名&nbsp
描述&nbsp
cmd.r&nbsp
包含命令表的资源源文件&nbsp
cmd.h&nbsp
包含应用命令号的头文件,由rcomp&nbsp-h产生&nbsp
cmd.rsc&nbsp
编译后的命令表资源文件&nbsp
 &nbsp
 &nbsp
扩展名&nbsp
描述&nbsp
typ.mt&nbsp
包含C结构和联合的类型文件&nbsp
typ.r&nbsp
rsctype产生的资源源文件&nbsp
typ.rsc&nbsp
编译后的类型资源文件&nbsp
 &nbsp
 &nbsp
扩展名&nbsp
描述&nbsp
.r&nbsp
资源源文件&nbsp
.rsc&nbsp
编译后的资源源文件&nbsp
 &nbsp
 &nbsp
扩展名&nbsp
描述&nbsp
msg.r&nbsp
包含消息资源的资源源文件&nbsp
msg.rsc&nbsp
编译后的消息资源文件&nbsp
 &nbsp
 &nbsp
扩展名&nbsp
描述&nbsp
dlg.r&nbsp
包含对话框及其item资源的资源源文件&nbsp
dlg.rsc&nbsp
编译后的对话框及其item的资源文件&nbsp
 &nbsp
 &nbsp
2、创建程序时用到的文件类型&nbsp
表4、创建程序时用到的文件类型&nbsp
扩展名&nbsp
描述&nbsp
.h&nbsp
源程序用到的标准头文件&nbsp
txt.h&nbsp
包含文本串的头文件&nbsp
.fdf&nbsp
包含函数原型的函数声明文件&nbsp
.mc&nbsp
MDL源程序文件&nbsp
.mo&nbsp
由.mc文件编译成的目标文件&nbsp
.mp&nbsp
用mlink生成的程序文件&nbsp
.ml&nbsp
用mlib生成的包含目标代码的库文件&nbsp
.mi&nbsp
rlib产生的中间文件&nbsp
.ma&nbsp
应用文件(MicroStation中运行)&nbsp
 &nbsp
 &nbsp
十五、MDL文件类型及相互其关系&nbsp
 &nbsp
图4表明了不同的MDL应用组件是如何编译到一起的。&nbsp
 &nbsp
图4、MDL文件类型及其相互关系&nbsp
 &nbsp
十六、间接命令行参数&nbsp
 &nbsp
以上提到的这些开发工具,在实际使用过程中都要键入大量命令行参数,有没有减少这种烦琐的参数输入的方法呢?有,那就是使用参数文件(option&nbspfiles)把经常使用的参数设置写到一个文本文件中,然后在命令行中加上&nbsp@option_file,即:&nbsp
command&nbsp@option_file

发表评论

您的邮箱不会被公开。* 为必填项