MAPGIS二次开发基础知识
一、手动注册组件与注销组件
COM以及客户应用程序所需的、用来定位组件及对组件进行实例化的信息存储在
Windows的注册表(Registry)里。因此,在使用组件之前要对组件进行注册,
只有成功注册才能引用该组件,其具体步骤为:
1.将包容组件的DLL文件放入MAPGIS PROGRAM目录下,假设物理路径为:D:\mapgis65\program\MapGisBasCom1.dll
2.运行注册表程序注册组件Windows开始菜单-〉运行:
regsvr32D:\mapgis65\program\MapGisBasCom1.dll注册成功与否将有对话框弹出。
3.注销该组件方法为:
regsvr32/u D:\mapgis65\program\MapGisBasCom1.dll
二、Visual Basic中嵌入对象类型库
为了使Visual Basic能够访问MAPGIS对象定义,应该在Visuai Basic项目或模块中嵌入MAPGIS对象类型库。如果想把一个Visual Basic对象声明为MAPGIS对象类型,要求嵌入MAPGIS对象类型库,如果想把一个Visual Basic对象声明为一般Object类型,就不必嵌入MAPGIS对象。
为了在项目中嵌入MAPGIS对象类型库,通常执行这些步骤:
从Project(工程)菜单,选择References,References对话框出现,选中复选框嵌入MapGisBasCom1Type Library文件。这要求VisualBasic环境或代码模块编辑器是活动的,正在运行。
三、使用MAPGIS对象
可以使用Visual Basic编写使用MAPGIS对象的程序。在Visual Basic程序中使用MAPGIS 对
象所要求的步骤是:
1.嵌入MAPGIS对象类型库。
2.建立一个MAPGIS对象。
3.使用MAPGIS对象和包含的其他对象。
4.释放MAPGIS对象。
使用一个句点(.)把对象变量与该对象的属性、方法和集合分开。
四、使用C++和COM函数
可以使用C++和COM函数编写使用MAPGIS对象的程序。在C++程序中使用
MAPGIS对象所要求的步骤是:
1.嵌入MAPGIS对象和COM头文件,并链接到COM库。
2.初始化C0M库。
3.建立一个MAPGIS对象。
4.使用MAPGIS对象和包含的其他对象。
5.释放MAPGIS对象。
6.解除C0M库的初始化。
使用成员选择运算符(->)把“对象指针”变量与属性、方法和集合函数分开。
嵌入MAPGIS对象
对MAPGIS对象编程的第一步是在项目中嵌入合适的类型库或头文件。
完整的MAPGIS对象类型库包含在MapGisBasCom1.件中,这个文件的默认路径:
D:\mapgis65\include\MapGisBasCom1.h
类型库含有关于所有MAPGIS对象、属性和方法的信息。
五、COM的调用
MAPGIS对象包括ANSI和Unicode这两个定制接口。使用ANSI接口时,所有MAPGIS对象字符
串都是每个字符一个字节的ANSI字符串。使用Unicode接口时,所有MAPGIS对象字符串都是每个字符两个字节的Unicode字符串。所有MAPGIS对象字符串都使用====BSTR字符串数
据类型。
默认情况下使用ANSI定制接口和ANSI====BSTR字符串。如果想使用Unicode定制接口和Unicode=====BSTR字符串,在嵌入所有头文件之前必须定义UNICODE和_UNICODE。
例如:
#define UNICODE
#define_UNICODE
在字符串值两端使用TEXT(“str”)宏。默认情况下,这些是ANSI“Str”字符串。在定
义了UNICODE和_UNICODE时,这些是Unicode L“Str”字符串。在32位0LE中,所有BSTR 字
符串是Unicode字符串。为了使C++程序能够访问MAPGIS对象定义,除了嵌入Windows和0LE头文件之外,还必须嵌人MAPGIS==.H和MAPGIS==.H头文件。默认情况下,MAPGIS头文件位于======\INCLUDE目录中。
Visual C++项目的Include设置或INCLUDE环境变量应指向含有这些文件的目录。
必须嵌入以下头文件:
1.MapGisBasCom1_i.c
2.MapGisBasCom1.h
例如:
#include"MapGisBasCom1_i.c"
#include"MapGisBasCom1.h"
Visual C++项目的Library设置或LIB环境变量应指向含有这些文件的目录。
在程序能使用MAPGIS对象之前,必须初始化C0M库。
Visual Basic
MAPGIS程序不必初始化COM,Visual Basic自动初始化C0M库。
C++
所有MAPGIS COM函数都返回一个HRESULT值,这个值含有关于MAPGIS COM函数的成功或失败
的信息。可以声明单个HRESULT变量并重复利用它。例如:
HRESULT hr;
在调用任何MAPGIS或COM函数之前,MAPGIS程序必须使用COM CoInitialize函数初始化COM
库。例如:
hr=CoInitialize(Null);
必须把NULL传递给CoInitialize。
七、建立MAPGIS对象
MAPGIS组件的核心是MAPGIS对象。
Visual Basic
在Visual Basic中有2个方法用于建立MAPGIS对象,这2个方法都涉及使用Dim语句声明
特定类型的对象变量。
特定的MAPGIS对象类型
常用的方法(如果使用的Visual Basic版本支持它)是使用Dim语句声明特定MAPGIS对象对象类型的对象变量,这个方法要求MAPGIS类型库包括在Visual Basic项目中。为了实际建立一个MAPGIS对象的新实例.可以在Dim语句中使用New关键字(如果使用VisualBasic 版
本支持它的话)或者使用CreateObject函数。
例如,使用New关键字创建新的MAPGIS对象的语句是:
Dim ldot As New L_DOT
例如,使用CreateObject函数声明和创建一个新的MapGis对象:
Dim ldot As L_DOT
Set ldot=CreateObject("MapGisBasCom1.L_DOT")
有些版本的Visual Basic使用虚函数表绑定(vtable-binding),或早期绑定。直接使用MAPGIS定制接口(不通过COM IDispatch接口),产生最好的性能。
有些版本的Visual Basic使用推迟绑定的形式,叫做分派ID绑定(dispID,binding),它使
用COM IDispatch。IDispatch::Invoke函数与在MAPGIS类型库中包括的dispID一起使用。这种方法使应用的性能没有使用New关键字那样快.但比使用Object类型快。
八、在C++中建立MAPGIS对象
在C++中只有一种方法建立MAPGIS对象,声明合适的MAPGIS“对象指针"类型的对象变量,然
后使用COM CoCreateInstance函数建立MAPGIS对象的新实例。把以下参数传递给CoCreateInstance:
1.MAPGIS对象的类ID
2.NULL
3.CLSCTX_INPROC_SERVER
4.MAPGIS对象的接口ID
5.MAPGIS“对象指针”变量的地址(使用&运算符的地址)。
例如,要建立一个新的ID_Dot MAPGIS对象:
IPntArea*ptPAi;
字符串函数的头文件hr=CoCreateInstance(CLSID_PntArea,
NULL,
CLSCTX_INPROC_SERVER,
IID_IPntArea,
(void**)&ptPAi);
注意:一个多线程程序,必须串行化对MAPGIS对象的所有访问,以避免重入.
九、函数库名称
函数库名称c,c++说明文件
工作区基础函数Win_area.h
矩形图框函数frmdll32.h
投影类库projdll.h
控制点操作w32_cpnt.h
状态栏显示点转换以及工作区投影函数cordcvt.h
图形显示输出Map_out.h
win_out.h
工程对象操作函数以及拼版文件操作函数Map_prj.h
编辑工程文件Prj_Disp.h
图例和工程文件操作函数Project.h
图像显示函数Mapdisp.h
图像编辑函数Mapedit.h
输入编辑子系统类库CGisEdit.h
CPrjEdit.h
拓扑操作函数Gistopo.h
图元以及剪贴板操作函数clippaste.h
UNDO处理数据及成员函数gistool.h
窗口操作函数CGisView.h
GisView对象函数Win_oper.h
空间分析函数Spc_anly.h
各种头文件MapGis.h
十、怎样用vb对mapgis进行二次开发,不知道怎样将二者联系起来
Vb开发三种方式:
MAPGIS API开发库
通过调用应用程序接口直接编程
MAPGIS可视控件(ocx)
MAPGIS组件开发(com)
通过控件和组件编程
如何创建MAPGIS对象
Dim workai As NEW PntArea
Dim workai As PntArea
Set workai=CreateObject(“MapGisBasCom1.pntarea”)
三种方式可以互为补充。
前MAPGIS二次开发库主要以API函数、MFC类库、ActiveX控件三种方式提供。开发库被封装于若干动态链接库(DLL)中。
API函数在使用方法上与Windows的API函数完全一样,因此是独立于开发工具的。无论您使用VC++、VB还是Dephi…,您在这些工具中如何调用Windows的API函数,您就

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。