有关MicroStation开发的基本问题

[转载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文件即可。
(有空时再详细写出步骤吧。最近太忙)

 

Parents
  • [转载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即可执行。

     


    This is a test

Reply
  • [转载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即可执行。

     


    This is a test

Children
No Data