Вы находитесь на странице: 1из 4

This is where you can find and contribute to discussions, ideas, and other

information about 中國BDN社區.

Yongan.Fu Wed, Jun 13 2012 7:47 AM 0

第一章、建立一個最簡單的MDL應用程序
本章將帶領您從零開始一步步建立一個最簡單的Hello World本機代碼MDL應用程序,該程序能夠在Mstn中裝載運
行。

1、在任一驅動器上建立文件夾\MDLSource\HelloWorld,我是在D:上建立的;

2、啟動一個文本編輯器(當然可以啟動VS2005用作編輯器),在其中鍵入如下內容並保存為文件
D:\MDLSource\HelloWorld\HelloWorld.cpp。該文件中含有程序的入口點函數MdlMain,當應用程序被裝載後會從該
入口點開始執行。我們在該函數中調用了MDL C API函數mdlDialog_dmsgsPrint用以彈出一個消息框顯示Hello
World字樣。

/*‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
|   HelloWorld.cpp                                             |
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐*/
#include <MicroStationAPI.h>
#include <msdialog.fdf>

extern "C" DLLEXPORT int MdlMain (int argc, char *argv[])
{
   mdlDialog_dmsgsPrint ("Hello World");
   return 0;
}

3、在文本編輯器中鍵入如下內容並保存為文件D:\MDLSource\HelloWorld\HelloWorld.r。該文件中定義了
DllMdlApp資源,該資源的作用是將MA(實際上不是MA文件名而是任務標識符)與指定的DLL文件關聯起來。

#include <rscdefs.h>
#define  DLLAPP_PRIMARY     1

DllMdlApp   DLLAPP_PRIMARY =
{
    "HELLOWORLD", "HelloWorld"    // taskid, dllName
}

4、將如下內容複製並粘貼成一個叫做HelloWorld.mke的文件保存到D:\MDLSource\HelloWorld下。該文件是生
成項目的控制文件。在項目生成過程中,bmake讀取該文件的內容然後調用相應的編譯器和鏈接器從源文件生成最
終的MA和DLL。上一章的圖片顯示了這一項目生成過程。

#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
#    $Source: HelloWorld.mke
#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
appName   = HelloWorld

appObjects = $(o)$(appName)$(oext)
appRscs    = $(o)$(appName).rsc

baseDir    = $(_MakeFilePath)

%include mdl.mki

dirToSearch = $(MSMDE)/mdl/MicroStationAPI
%include cincapnd.mki

#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# Create needed output directories if they don't exist
#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
always:
    ~mkdir $(o)
    ~mkdir $(rscObjects)
    ~mkdir $(reqdObjs)

#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# Define macros for files included in our link and resource merge
#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
DLM_NO_SIGN       = 1
DLM_OBJECT_DEST   = $(o)
DLM_NAME    = $(appName)
DLM_OBJECT_FILES  = $(appObjects)
DLM_NO_DLS   = 1
DLM_NO_DEF   = 1
DLM_NOENTRY   = 1
DLM_DEST   = $(mdlapps)
DLM_NO_DELAYLOAD  = 1               
DLM_NO_NTBSADDR   = 1
DLM_LIBRARY_FILES = $(mdlLibs)BentleyDgn.lib \
             $(mdlLibs)toolsubs.lib \
             $(mdlLibs)ditemlib.lib \
                    $(mdlLibs)mdllib.lib

#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# Create command table and header file
#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
#$(baseDir)$(appName)cmd.h  : $(baseDir)$(appName)cmd.r

#$(o)$(appName)cmd.rsc     : $(baseDir)$(appName)cmd.r

#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
#       Generate resource files
#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
$(o)$(appName).rsc          : $(baseDir)$(appName).r

#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# Generate MA
#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
$(mdlapps)$(appName).ma     : $(appRscs)
        $(msg)
        > $(o)make.opt
        ‐o$@
        $(appRscs)
        <
        $(RLibCmd) @$(o)make.opt
        ~time

#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
# Builds any necessary CODE modules and link them to DLL
#‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
$(o)$(appName)$(oext)       : $(baseDir)$(appName).cpp
%include dlmlink.mki

5、點擊「開始 > 所有程序 > Bentley > MicroStation V8i (SELECTseries 3) SDK > MicroStation Developer Shell」
啟動MDL程序開發環境。在命令提示符後鍵入CD /D D:\MDLSource\HelloWorld並回車進入我們的項目所在目錄,
然後再鍵入bmake –a來生成HelloWorld.ma和HelloWorld.dll。這些生成的文件位於…\MicroStation\mdlapps目錄
下。

【注意】:如果您的操作系統是中文版,在編譯時可能會遇到如下錯誤提示:

其原因是這個pointcloudApi.h頭文件的代碼頁可能用的是純英文的。您需要在VS中打開這個頭文件,隨意增加一個
空格後保存即可。

6、啟動MicroStation,選菜單Utilities > MDL Applications打開MDL對話框,在該對話框下部的Available


Applications列表框中找到並選中HELLOWORLD,然後點按鈕Load裝載我們的MDL應用程序。此時會看到一個寫有
Hello World字樣的消息框彈出。如下圖所示:

7、在您想要重新生成您的HelloWorld項目前需要首先卸載該應用,否則將很可能遇到如圖所示的錯誤提示。卸載方
法是在以上MDL對話框上部的Loaded Applications中選中HELLOWORLD,然後點擊Unload按鈕即可。
【技巧】:還可以通過鍵入命令來實現MDL應用程序的裝載和卸載。選菜單Utilities > Key-in打開鍵入命令對話框,
輸入MDL LOAD HelloWorld來裝載應用,輸入MDL UNLOAD HelloWorld來卸載應用。