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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java的三种取整方法「建议收藏」

    方法一:向上取整Math.ceil();举例:Math.ceil(11.4)=12;Math.ceil(-11.6)=-11;方法二:向下取整Math.floor();举例:Math.floor(11.7)=11;Math.floor(-11.2)=-12;方法三:四舍五入Math.round();顾名思义,四舍五入后取整,其算法为Math.round(x+0.5),即原来的数字加上0.5后再想下

    2022年4月10日
    117
  • JVM内存分配担保机制[通俗易懂]

    JVM内存分配担保机制[通俗易懂]                  JVM内存分配担保机制                       转自:https://cloud.tencent.com/developer/article/1082730 在现实社会中,借款会指定担保人,就是当借款人还不起钱,就由担保人来还钱。在JVM的内存分配…

    2022年5月28日
    113
  • mybatis自定义分页_java分页查询接口的实现

    mybatis自定义分页_java分页查询接口的实现问题出现原因是集成mybaits时会自动加上selecttmp_page.*,rownumrow_idfrom(查询语句)tmp_page出现这个问题的原因是查询语句的列有重复的,直接查询是看不出来原因的,把重复的列名找出来然后修改…

    2022年10月4日
    0
  • PHP中对PSR-1、PSR-2规范理解

    PHP中对PSR-1、PSR-2规范理解

    2021年5月25日
    109
  • pycharm更改环境_pycharm配置环境变量

    pycharm更改环境_pycharm配置环境变量我们在使用pycharm创建项目的时候我们可以直接选择创建项目在什么环境之上。但是大多时候我们都是直接在别人的工作上进行二次开发,所以这时候就涉及直接打开代码,这就需要我们自行调整Python环境0.准备工作1.你需要有Python环境,我这里使用的是anaconda配置的虚拟环境1.代码提示和动态解析的设置这一步决定你写代码的时候是不是会报错,是不是能给出代码提示。首先我们直接File–》Settings直接熟练的打开设置:之后我们直接按照下图,找到调整环境的位置按照你的实际情况,选

    2022年8月28日
    0
  • Android系统签名以及生成keystore秘钥

    Android系统签名以及生成keystore秘钥Android11系统签名以及keystore一、什么是系统签名Android下所有APP都要进行签名,而有些权限,只有系统签名了的APP可以拥有。而且需要在APP的AndroidManifest中添加以下IDandroid:sharedUserId=”android.uid.system”二、使用signapk.jar签名2.1找到对应文件(1)在根目录下创建keystore文件夹以方便工作(2)查找密钥和证书build/target/product/security/plat

    2022年6月21日
    80

发表回复

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

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