vc 调用dll_调用API

vc 调用dll_调用APIGoogle公司已经将GoogleCOMAPI开放,这样我们就可以通过开放的API来对GoogleEarth进行操作了,比如控制当前视图的高度、中心经纬度,保存当前图片等等。下面是GoogleCOMAPI的网址:http://earth.google.com/comapi/那么,VC程序员如何使用这些API来控制GoogleEarth呢?下面我们编写一个简单的程序来说明对G

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Google公司已经将Google COM API开放,这样我们就可以通过开放的API来对GoogleEarth进行操作了,比如控制当前视图的高度、中心经纬度,保存当前图片等等。下面是Google COM API的网址:

http://earth.google.com/comapi/

那么,VC程序员如何使用这些API来控制GoogleEarth呢?下面我们编写一个简单的程序来说明对Google COM API的使用。

源代码下载 http://bbs.godeyes.cn/upload/2007/03/29/113327.rar

首先用VC建立一个基于Dialog的工程(这个不用教了吧?),工程名为ControlGe,工程建好后,下面就是把Google提供的类添加到工程里边来。

Ctrl+W,打开类向导页面,点击“Add Class”按键,选择“From a type library”,然后到安装GoogleEarth的目录下,找到googleearth.exe文件,点击“打开”按键。

这时会弹出一个框来确认产生Google的类,直接点击“OK”键,这是会生成两个文件加入的工程中:googleearth.h和googleearth.cpp,里面就是我们想要的类了。
GoogleEarth的类已经生成了,那我们如何来用它们呢?各位看客不用着急,我们一步步来。

首先,我们得调用一下::CoInitialize(NULL);初始化一下COM库了,这个函数可以在ControlGe.cpp文件中的InitInstance()函数里面调用。

然后呢,我们再在ControlGeDlg.h中定义一个类成员变量:

IApplicationGE m_geApplication;

顺便说一下,IApplicationGE可是Google COM API最主要的一个接口了,从它提供的操作数量就可以看得出来。

好了,离成功不远了,控制的变量也定义了,下面就开始用它来控制GE吧。

那么我们如何将刚定义的变量取得对GE的控制权呢?费话少说,首先在ControlGeDlg.cpp文件中定义一个变量:

static const CLSID CLSID_ApplicationGE = {0x8097D7E9,0xDB9E,0x4AEF, {0x9B,0x28,0x61,0xD8,0x2A,0x1D,0xF7,0x84}};

然后在OnInitDialog()中加入以下代码:

m_geApplication.CreateDispatch(CLSID_ApplicationGE);

呵呵,现在GE就归你操控了!

我们试着做个简单的操作吧,添加一个按键,然后添加按键的点击处理函数,在函数中加入以下代码:

CString strFileName;

static char BASED_CODE szFilter[] = “jpg Files (*.jpg)|All Files (*.*)|*.*||”;

CFileDialog dlgFile(FALSE, “jpg”, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);

if (dlgFile.DoModal() == IDOK)

{

CWaitCursor wait;

strFileName = dlgFile.GetPathName();

m_geApplication.SaveScreenShot(strFileName, 100);

}

试试看,这是将当前GE的地图给保存成一个jpg格式的图片,只可惜只能保存成黑白图片,google还是给自己留了一手的。

可能上面的代码运行会有些问题,也许是你的GE版本太低了,也许是你的Google COM未注册,注册一下就可以了,Google对注册的说明:

If, for some reason, the Google Earth COM API needs to be registered again, you can execute GoogleEarth.exe with “/RegServer” as a command line argument. 

For instance, assuming GoogleEarth.exe is located in C:\Program Files\Google\Google Earth, the following command line would register Google Earth’s COM API: 

“C:\Program Files\Google\Google Earth\googleearth.exe” /RegServer 

To unregister Google Earth’s COM API, execute the following command: 

“C:\Program Files\Google\Google Earth\googleearth.exe” /UnregServer

好了,我们下面就可以对照Google COM API的文档来试一试对GE的控制操作了。下面我再来演示一下如何把视图切换到指定地方,添加如下代码:

ICameraInfoGE geCamera;

geCamera.AttachDispatch(m_geApplication.GetCamera(TRUE));

geCamera.SetRange(800);

geCamera.SetFocusPointLongitude(113.972522);

geCamera.SetFocusPointLatitude(22.561294);

m_geApplication.SetCamera(geCamera, 1.5);

执行以上代码后,GE就会将视图切换到。。。嘿嘿,到俺家了。。。

【扩展】因为要做GoogleEarth的上位机,所以找了些相关的资料,有了上面的资料,就十分方便了

俺就添加了一个按钮,将生成的kml文件直接导入GoogleEarth打开

m_geApplication.OpenKmlFile(“生成的Kml的路径”,0);

如果要增加其他功能,就在http://earth.google.com/comapi/查相关API就可以了

转自:hi.baidu.com/sjk2046/blog/item/33fb1e24e5e92734c89559fa.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170046.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 这款开源自动化运维平台,让你彻底摆脱人肉运维「建议收藏」

    这款开源自动化运维平台,让你彻底摆脱人肉运维「建议收藏」  大家好,我是小编南风吹,每天推荐一个小工具/源码,装满你的收藏夹,让你轻松节省开发效率,实现不加班不熬夜不掉头发!  今天小编推荐一款面向中小型企业设计的轻量级无Agent的自动化运维平台整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能。开源协议  使用AGPL-3.0开源许可协议链接地址  公众号【Github导航站】回复关键词【spu】获取git地址特性批量执行:主机命令在线批量执行在线终端:主机支

    2022年5月13日
    56
  • 前端面试题汇总

    前端面试题汇总歌谣最全前端面试题(建议收藏,欢迎讨论)【Vue】[vue]从0到1自己构架一个vue项目,说说有哪些步骤、哪些重要插件、目录结构你会怎么组织

    2022年5月6日
    39
  • 不能复制文字的网页文字复制怎么办_实现网页布局的方法

    不能复制文字的网页文字复制怎么办_实现网页布局的方法想必很多小伙伴遇到过这样的情况,在网上查找很多的资料,但是因为网页本身的限制不允许复制或者需要付费:遇到这种情况应该怎么办呢?接下来,就和大家分享下如何免费复制网页上不能复制的文字!解决方法一:转到打印界面进行复制:在需要复制文字的界面鼠标右键选择打印或者使用快捷键Ctrl+P,打开打印界面,在打印界面就可以进行复制操作啦!解决方法二:源代码界面复制在需要复制文字的界面鼠标右键选择“查看网页源代码”或者使用快捷键Ctrl+U,打开源代码界面,在源代码界面找到自己要复制的内容复

    2022年10月13日
    4
  • JPA(二)JPA配置

    JPA(二)JPA配置一 依赖导入 以 maven 工程导入坐标为例 lt properties gt lt project build sourceEncodi gt UTF 8 lt project build sourceEncodi gt lt project hibernate version gt 5 0 7 Final lt project hibe

    2025年7月16日
    4
  • linux中setfacl命令,Linux 中的Setfacl命令

    linux中setfacl命令,Linux 中的Setfacl命令setfacl命令是用来在命令行里设置ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名。选项-b,–remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。-k,–remove-default:删除缺省的acl规则。如果没有缺省规则,将不提示。-n,–no-mask:不要重新计算有效权限。setfacl默认会重新计算ACLmask…

    2022年6月23日
    28
  • [安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向

    [安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向安全攻防进阶篇将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等。第一篇文章先带领大家学习什么是逆向分析,然后详细讲解逆向分析的典型应用,接着通过OllyDbg工具逆向分析经典的游戏扫雷,再通过CheatEngine工具复制内存地址获取,实现一个自动扫雷程序。基础性文章,西电UI您有所帮助~

    2022年6月19日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号