MDL

王朝百科·作者佚名  2010-02-18  
宽屏版  字体: |||超大  

全称:MicroStation Development Language

MDL是MicroStation的开发语言

MDL是MicroStation的“应用引擎(Application Engine)”,MDL可以直接在MicroStation中运行并且表现为MicroStation本身的一部分。许多MicroStation的命令都可以在MDL中应用。

MDL的组成

标准C (ANSI C) 程序设计语言(当然有某些限制和扩展);

一整套开发工具(包括C编译器、连接器、链接库、资源编译器和资源库、Make程序以及调试工具);

MicroStation内部的用于执行MDL应用程序的伪码解释器;

MicroStation内部的MDL调试器;

大量的运行库函数;

可以改变MicroStation各种行为的钩子(Hooks)函数,所谓钩子函数是指那些在某种事件发生时被MicroStation自动执行的函数;

GUI开发工具,可以用于开发基于Motif的图形用户界面(包括:对话框、下拉菜单等);

资源管理器;

运行及卸载MDL应用程序

在MicroStation命令窗口中运行MDL应用时,可以指定一个应用名称和任务识别码(Task ID),其中前者是必须的。具体使用方法如下:

MDL LOAD│SILENTLOAD [DEBUG│NODEBUG] <应用名> [,<任务识别码>] [<参数>]

MicroStation将首先在当前目录下查找用户在命令行中指定的应用,如果找不到,再到由MicroStation环境变量MS_EXE和MS_MDL指定的目录下去寻找。

如果用户未指定应用程序的扩展名,MicroStation将首先寻找无扩展名的文件,其次才是.MA文件和.RSC文件。因此运行时最好键入应用程序的全名。

卸载MDL应用的命令为:

MDL UNLOAD│SILENTUNLOAD [<任务识别码>]

MDL应用还可以在MDL对话框中装载运行,通过MDL对话框也可以卸载MDL应用。

MDL的高级调用方式

在一个MDL应用中调用另一个MDL应用:使用MicroStation的内部函数mdlSystem_LoadMDLProgram;

在MicroStation初始化时(打开DGN文件之前或者进入图形模式之前)调入MDL应用:使用环境变量MS_INITAPPS和配置变量MS_DGNAPPS,如果要调用多个MDL程序,用分号(;)隔开,语法如下:MS_DGNAPPS=应用程序名[,任务识别码] [/D];

在DGN文件打开时运行MDL应用:使用mdlSystem_CreateStartupElement函数在DGN文件中创建一个启动元素(Start-up Element,类型代码为66),即可在MicroStation打开DGN文件后立即运行指定的MDL程序;

KEYIN应用:MDL KEYIN <应用名> <命令字串>。

MDL的高级卸载方式

在程序中使用标准C的 “exit”函数卸载程序;

MicroStation退出时可自动卸载MDL程序;

应用程序发生严重错误时会自动退出;

在一个应用中卸载另一个应用使用MicroStation内部函数mdlSystem_unloadMDLProgram;

在MDL调试器中使用QUIT命令可以卸载一个应用程序。

附:

MicroStation的开发工具

UCMs ………… User Commands

MicroCSL …… MicroStation Customer Support Library

MDL …………… MicroStation Development Language

MDL还是麦当劳的意思。麦当劳的英文全称是McDonald's 现代的型男型女们通常也都会像昵称肯德基KFC一样的称麦当劳做:MDL

MDLMemory Descriptor List

// I/O system definitions.

//

// Define a Memory Descriptor List (MDL)

//

// An MDL describes pages in a virtual buffer in terms of physical pages. The

// pages associated with the buffer are described in an array that is allocated

// just after the MDL header structure itself.

//

// One simply calculates the base of the array by adding one to the base

// MDL pointer:

//

// Pages = (PPFN_NUMBER) (Mdl + 1);

//

// Notice that while in the context of the subject thread, the base virtual

// address of a buffer mapped by an MDL may be referenced using the following:

//

// Mdl->StartVa | Mdl->ByteOffset

//

typedef struct _MDL {

struct _MDL *Next;

CSHORT Size;

CSHORT MdlFlags;

struct _EPROCESS *Process;

PVOID MappedSystemVa;

PVOID StartVa;

ULONG ByteCount;

ULONG ByteOffset;

} MDL, *PMDL;

#define MDL_MAPPED_TO_SYSTEM_VA 0x0001

#define MDL_PAGES_LOCKED 0x0002

#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004

#define MDL_ALLOCATED_FIXED_SIZE 0x0008

#define MDL_PARTIAL 0x0010

#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020

#define MDL_IO_PAGE_READ 0x0040

#define MDL_WRITE_OPERATION 0x0080

#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100

#define MDL_FREE_EXTRA_PTES 0x0200

#define MDL_DESCRIBES_AWE 0x0400

#define MDL_IO_SPACE 0x0800

#define MDL_NETWORK_HEADER 0x1000

#define MDL_MAPPING_CAN_FAIL 0x2000

#define MDL_ALLOCATED_MUST_SUCCEED 0x4000

#define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA |

MDL_PAGES_LOCKED |

MDL_SOURCE_IS_NONPAGED_POOL |

MDL_PARTIAL_HAS_BEEN_MAPPED |

MDL_PARENT_MAPPED_SYSTEM_VA |

MDL_SYSTEM_VA |

MDL_IO_SPACE )

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有