[转载Bentley中文知识库原贴] MicroStation迷:
【问1】:MicroStation目前支持哪几种开发方式? 【答】:主要有VBA、MDL(C/C++)、Addins(.NET)。还有旧式的MicroStation BASIC等。
【问2】:什么是MDL ? 【答】:MDL是MicroStation Development Language的缩写,翻译过来就是"MicroStation开发语言"。现在正逐渐变为MicroStation Development Library(MicroStation开发库)。它原来是一套API函数加上C语言再加上Bentley自己的编译器和链接器,我们称之为PureMDL(纯MDL)。现在正逐渐降为库的地位,因为我们可以用微软的VC++直接调用这些API函数来开发了。
【问3】:PureMDL和NativeCode有什么区别 ? 【答】:PureMDL和NativeCode是目前用MDL开发MicroStation应用的两种方式。正如1中所述,PureMDL用C语言的语法写程序,用Bentley提供的编译器和链接器生成程序,最终可执行的文件扩展名为MA (MicroStation Application的缩写)。而NativeCode则是用C++(当然主要是指微软的VC++)写程序,用微软的编译器和链接器生成程序,最终可执行的文件为DLL。由于还需要MA作为桥梁,所以,用NativeCode开发时最终生成的执行程序是DLL+MA。
【问4】:用NativeCode开发时对话框是用MFC对话框还是继续使用MDL资源定义? 【答】:两者都可以,但各有利弊。MFC对话框适合那些熟悉MFC的用户,在MFC对话框中能嵌入各种控件。但MFC对话框和MicroStation总有"两张皮"的感觉,在MFC对话框中不能直接嵌入MicroStation中的控件,而且也要受到MicroStation Dialog Manager的控制。MDL资源定义的对话框和MicroStation浑然天成,能在这种对话框中直接嵌入MicroStation的各种控件,缺点是没有可视化的设计界面,需要你一行行自己写(当然主要是复制、粘贴、修改了)。实际上,MicroStation自身的大多数界面(菜单、工具栏、对话框等)都是用MDL资源写出来的。有些界面逐渐开始用Winform来写,如那个新式的Element Information对话框。
[转载Bentley中文知识库原贴] oneman: 按照我的理解,NativeCode也可以开发PureMDL,对不对?
[转载Bentley中文知识库原贴] MicroStation迷:不对。PureMDL和NativeCode的区别在于生成最终执行程序所用的编译器和链接器不同,因而生成的最终程序也不同。
[转载Bentley中文知识库原贴] oneman: 我主要想学习PureMDL编程,因为我用的是MicroStation J,只能用PureMDL。那么PureMDL该怎么编程?
[转载Bentley中文知识库原贴] MicroStation迷:置顶的帖子中有一本《MDL程序设计》电子书,基本上就是按照PureMDL来讲的。其实PureMDL和NativeCode最大的区别是所用的编译器和链接器不同,编程思路基本上是一样的。当然,从Athens开始引入了大量的类,要使用这些类就必须用C++而不能用C, 也就必须用NativeCode而不能用PureMDL了。
[转载Bentley中文知识库原贴] oneman: 谜兄,能不能编写一个最简单的PureMDL程序,把编写的程序文件和编译过程都用视频录制下来,让我们这些初学者学习?否则,真的很难入门。 这么多的概念对于我们从来没有接触过MDL的爱好者用处不大,我需要基本的入门过程学习,可是,无论是教程还是录像都不能满足需要。学了这么久,我还是编译不了自己的第一个程序,很沮丧的。 当然,我会C语言编程。
[转载Bentley中文知识库原贴] MicroStation迷:你安装完MicroStation SDK V8XM后会有一个MDLProjects目录,下面带有大量PureMDL的例子。按如下步骤可生成可执行的ma程序。 ①修改SDK中的一个Bug: 修改C:\Program Files\Bentley\MicroStation\mdl\includes\compilers.mki中的第29行为:COMPENVMKI_DIR = $(_MakeFilePath) ②启动MicroStation Developer Shell, 会出现一个黑窗口; ③用DOS命令进到...\MDLProjects\dlogdemo目录下,键入如下命令生成dlogdemo.ma bmake -dNO_COMPILERS_MKI ④启动MicroStation, 加载dlogdemo看一看人家程序的效果。然后再分析dlogdemo中每个源程序文件的每一行的含义。
MDL的开发如果都要从最基本的每个细节学起来确实内容太多。我不知道您想要一个什么样的入门程序,只是一个类似HelloWorld的程序能行吗?
[转载Bentley中文知识库原贴] oneman: 可以的啊,就以最简单的HelloWorld作为例子好了。如果把这个程序的编译步骤录制一段视频下来,我们就可以学习了。
希望可以在视频里看到:(0) 必须的设置步骤。(如果有) (1) 手工编写的程序有哪些文件。 (2) 如何编译,怎么运行编译命令,操作和编译的过程。 (3) 其它的一些步骤。(因为不了解,猜测可能会有一些其它的必要步骤) (4) 得到.ma文件并运行。
我所理解的编译过程就是:编写主程序文件 .mc,运行mcomp命令(当然通不过了)。可是在视频录像里面,编译好像只有一个步骤,就是运行bmake,然后就有.ma文件了。但是我试了试却不行。借这个机会,希望看完视频后能照葫芦画瓢,完成并通过一个.ma程序。个人认为,完成这一步之后,MDL才能慢慢理解,然后就可以一步步深入了。
先谢过了!
[转载Bentley中文知识库原贴] MicroStation迷:执行bmake命令就相当于你在VS中选择"生成项目"一样。Bmake程序会在当前目录中查找一个和目录名相同的一个MKE文件(制作文件),然后按照MKE文件中指定的生成项目的步骤来工作,所以,你除了一个.mc外,至少还需要一个mke文件即可。 (有空时再详细写出步骤吧。最近太忙)
[转载Bentley中文知识库原贴] MicroStation迷:给一个最简单的HelloWorld例子,该例子有两个文件组成:
一个是制造文件HelloWorld.mke,一个是执行源文件HelloWorld.mc。
注意:该制作文件只支持含有单个.mc源程序的工程(或叫项目,反正英文就是Project那个词儿): 对于MKE文件,您只需要将appName这个宏定义指定正确即可,其他行不需要改动。
#---------------------------------------------------------------------- # HelloWorld.MKE date: 2008.08 #----------------------------------------------------------------------
appName = HelloWorld
baseDir = ./ privateInc = $(baseDir)
%include mdl.mki
#---------------------------------------------------------------------- # Define symbol for files included in our link and resource merge #----------------------------------------------------------------------
appObjs = $(o)$(appName).mo \ $(mdlLibs)mdllib.dlo $(mdlLibs)ditemlib.dlo $(mdlLibs)mtg.dlo
appRscs = $(o)$(appName).mp
#---------------------------------------------------------------------- # Create needed output directories if they don't exist #---------------------------------------------------------------------- $(o)$(tstdir) : $(o)$(tstdir)
#--------------------------------------------- # Compile and link MDL Application #--------------------------------------------- $(o)$(appName).mo: $(baseDir)$(appName).mc
$(o)$(appName).mp: $(appObjs) $(msg) >$(o)make.opt $(linkOpts) -a$@ $(appObjs) < $(MLinkCmd) @$(o)make.opt ~time
#--------------------------------------------- # Merge Objects into one file #--------------------------------------------- $(mdlapps)$(appName).ma: $(appRscs) $(msg) >$(o)make.opt -o$@ $(appRscs) < $(RLibCmd) @$(o)make.opt ~time
HelloWorld.mc文件内容如下: /*-------------------------------------------------------------+ | HelloWorld.mc | +-------------------------------------------------------------*/ #include void main (void) { mdlDialog_dmsgsPrint ("Hello World !");
}
将以上两文件放到一个叫做HelloWorld的目录中(更上级目录名不限制)。启动MicroStation Developer Shell那个黑窗口,用DOS的CD命令将当前目录切换到这个HelloWorld目录下,键入bmake并回车就能生成一个helloworld.ma。进入MicroStation, MDL LOAD HELLOWORLD即可执行。