惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 热门话题
Stack Overflow Blog
Stack Overflow Blog
B
Blog
WordPress大学
WordPress大学
Project Zero
Project Zero
P
Palo Alto Networks Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 司徒正美
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
T
Tailwind CSS Blog
Forbes - Security
Forbes - Security
F
Full Disclosure
SecWiki News
SecWiki News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hacker News: Ask HN
Hacker News: Ask HN
C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
F
Fortinet All Blogs
Cisco Talos Blog
Cisco Talos Blog
G
Google Developers Blog
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
O
OpenAI News
Spread Privacy
Spread Privacy
MongoDB | Blog
MongoDB | Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Cybersecurity and Infrastructure Security Agency CISA
S
Securelist
V
Vulnerabilities – Threatpost
Y
Y Combinator Blog
IT之家
IT之家
U
Unit 42
腾讯CDC
S
Security Affairs
C
Cisco Blogs
Schneier on Security
Schneier on Security
The Last Watchdog
The Last Watchdog
B
Blog RSS Feed
宝玉的分享
宝玉的分享
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security @ Cisco Blogs
Cyberwarzone
Cyberwarzone
T
The Blog of Author Tim Ferriss

博客园 - Avlee

ArcGIS Server Manager 登录失败的解决方法 利用ArcSDE C API读取ArcSDE Raster数据 倡议以赞助的形式成立一个博客园的开发团队(博客园商业化尚早) 在WebGIS中试用Microsoft Silverlight有感 The MSVC project of the cairo library(version 1.4.6) WebGIS团队启用二级域名 Building the cairo graphic library using msvc Adobe 将停止对Adobe SVG Viewer的支持! SVG Authoring Guidelines[转] ArrayList.ToArray(Type) Or ArrayList.CopyTo(Array) Using Delegates with Data Readers to Control DAL Responsibility[转] 关于旧mdl程序向V8升级的问题 有了Flash和SVG,Adobe还想做什么呢? 根据权限创建页面上的功能按钮的一种简单有效的方法 如何让英文版的Adobe SVG Viewer显示中文文字 Adobe SVG Viewer 6.0 中自定义右键菜单 过年了,再忙也要回家...... 申请加入 “WebGIS” 团队 WebGIS团队刚刚成立
基于Geomedia Professional平台的GIS应用开发(一)
Avlee · 2005-08-29 · via 博客园 - Avlee

GeoMedia是美国Intergraph公司开发的桌面GIS平台,至于GeoMedia的介绍我在这里不多说,可以到Intergraph的网站www.intergraph.com/geomedia/或者通过Google了解更多详细情况。在这里所提到的Geomedia均指GeoMedia Professional 4.0 或 5.0。

使用GeoMedia开发GIS应用程序,需要了解一些GeoMedia平台中的一些术语和概念,请参见。在GeoMedia的帮助文档GeoMedia Professional Object Reference中可以找到很多VB例子,在这里我主要介绍用VC++6.0如何开发基于GeoMedia的应用程序。

为了让大家有个初步的概念和便于理解的环境,我先不介绍一些平台相关的术语和特性,而是直接描述如何用VC++6创建一个嵌入GeoMedia平台中运行的自定义工具程序。

为了你在下面的过程中不碰到什么不必要的麻烦,请先安装好VC++6.0英文版+SP6补丁。

好,开始进入正题。

第一步
打开VC6,创建工程。
工程类型为ATL COM AppWizard,我在这里将工程名字取为TestCmd。Next到下一步设置我们创建的ATL COM组件类型为Dynamic Link Library (DLL),并且选择MFC支持(这是为了使用大家比较熟悉的界面控制方式,避免对本主题内容理解上的障碍,如果你对ATL/WTL比较熟悉,那么完全可以不选择MFC的支持)。如下图:

第二步
工程创建好了之后,我们接下来要做的第一件事就是创建一个ATL COM对象,选择菜单Insert -> New ATL Object,在ATL Ojbect Wizard对话框中选择Objects,类型为Simple Object。在Wizard的下一步中,我们需要设置ATL Object的名字,我这里设置为TestCmdCom。在attributes标签页中设置线程模型(Threading Model)选择为单线程(Simgle), 接口(Interface)设置为双接口(Dual),也就是支持IDispatch和vtable绑定。 Aggregation设置为NO,也就是不需要聚合支持。另外勾选Support ISupportErrorInfo,以实现ISupportErrorInfo接口,其他的不需要选择。如下图:

第三步
在IDE自动生成的TestCmdCom.h文件中加入如下接口声明:

接口声明


在自动生成的TestCmdCom.cpp文件中加入如下接口定义:

接口定义

第四步
在TestCmd.idl文件中的

interface ITestCmdCom : IDispatch
{
};

中加入接口描述,完成后的格式如下:

接口描述

第五步:创建界面
在这一篇里,我们实现一个简单的功能:枚举当前的所有连接并显示在一个ComboBox中,先在工程中添加一个对话框(我在这里命名为CMainDlg),然后在对话框中添加一个ComboBox和一个Button,在Button的事件中我们添加如下代码:

OnButton1

完成这些后,我们需要在CTestCmdCom的Activate方法中启动该对话框,代码如下:

CMainDlg mainDlg;
mainDlg.SetGMApp(m_spApplication);
mainDlg.DoModal();

第六步:插件程序的注册安装
我们需要使用GeoMedia Pro自带的工具installusrcmd来注册我们生成的程序,使用这个工具需要我们创建一个ini文件来描述注册信息,格式如下:

[TestCmdCom]
ProgID
=TestCmd.TestCmdCom
CommandType
=0
EnableMask
=43008
ListenerMask
=0
IsModal
=1
Description
=GM Tool Test
ToolTip
=GM Tool Test
SmallMonoBitmapPath
=
SmallColorBitmapPath
=
LargeMonoBitmapPath
=
LargeColorBitmapPath
=

其中EnableMask的值是指什么状态下,该控件可以被使用(Enable),这个值可以用GeoMedia自带VB程序创建想到来生成;IsModal值为1表明我们的界面是模态对话框。

然后,用一下批处理来注册我们写好的插件:

regsvr32 TestCmd.dll /s
"D:\Program Files\GeoMedia Professional\Program\installusrcmd" /prod "GeoMedia Professional" TestCmd.dll TestCmd.ini

注册后,我们就可以在GeoMedia中的自定义工具中选择使用该工具了。

最后补充一句,发布程序的时候,使用MinDependency方式,这样就可以避免在没有安装VC6的机器上不能启动该插件工具的问题。

该文章中代码都可以在这里下载得到:TestCmd VC6 Project