Professional Documents
Culture Documents
第一章、建立一個最簡單的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中打開這個頭文件,隨意增加一個
空格後保存即可。
7、在您想要重新生成您的HelloWorld項目前需要首先卸載該應用,否則將很可能遇到如圖所示的錯誤提示。卸載方
法是在以上MDL對話框上部的Loaded Applications中選中HELLOWORLD,然後點擊Unload按鈕即可。
【技巧】:還可以通過鍵入命令來實現MDL應用程序的裝載和卸載。選菜單Utilities > Key-in打開鍵入命令對話框,
輸入MDL LOAD HelloWorld來裝載應用,輸入MDL UNLOAD HelloWorld來卸載應用。