C++调用IDL程序的做法(二)
作者:朱金灿
来源:http://blog.csdn.net/clever101
上次提到使用IDLDrawWidget Control 3.0来调用IDL程序,但是我们还有一些问题没有解决,比如C++程序如何把参数传递给IDL函数,比如IDLDrawWidget Control 3.0是否需要一个对话框来放置。今天我们谈谈如何解决这些问题。
首先谈谈参数传递的问题。IDLDrawWidgetControl 3.0是一个COM组件,因此C++程序要把参数值传递给IDL程序,先要构造一个Com类型变量,把参数值传给它,然后通过IDLDrawWidget Control 3.0的接口把Com类型变量传递给IDL程序的函数变量。下面以最常用的字符串类型和整型来说明:
// 将字符串传递给IDL函数,下面INIT_ENVI.sav里面有一个INIT_ENVI函数
std::string strIDLPath = PathName + std::string("\\IDL70");
_bstr_t bstr(strIDLPath.c_str());
// 构造一个COM类型变量vFileName
VARIANT vFileName;
VariantInit(&vFileName);
V_VT(&vFileName) = VT_BSTR;
vFileName.bstrVal = bstr;
// 定义一个IDL变量IDLPath,将vFileName传给它
m_IDLDrawX.SetNamedData("IDLPath",vFileName); // 加载INIT_ENVI.sav
std::string strProPath = m_IDLLibPath + std::string("INIT_ENVI.sav");
std::string strFullpath = std::string("restore,'")+strProPath+std::string("'");
long lRet = m_IDLDrawX.ExecuteStr(strFullpath.c_str());
// 执行INIT_ENVI函数
m_IDLDrawX.ExecuteStr("INIT_ENVI,IDLPath");
// 将整型传递给IDL函数,下面resample.sav里面有一个resample函数
VARIANT vPersent;
VariantInit(&vPersent);
V_VT(&vPersent) = VT_I4;
vPersent.lVal =50;
m_IDLDrawWidget.SetNamedData("nPersent", vPersent);
strProPath = m_IDLLibPath + std::string("resample.sav");
std::string strFullpath = std::string("restore,'")+strProPath+std::string("'"); m_IDLDrawX.ExecuteStr(strFullpath.c_str()); // 执行resample函数
m_IDLDrawX.ExecuteStr("resample, nPersent");
其次谈谈是否需要一个对话框来放置IDLDrawWidget Control 3.0控件,答案是不用的,因为IDLDrawWidgetControl 3.0控件可以动态创建,其动态创建和初始化代码如下:
CWnd *pFrame = AfxGetMainWnd();
// 注意这里必须有一个父窗口,可以是框架窗口,窗口风格设为WS_CHILD即可
if (!m_IDLDrawX.CreateControl(m_IDLDrawX.GetClsid(), NULL,
WS_CHILD,rt,pFrame, nID))
{
return -1;
} std::string strIdlDllPath = PathName+ std::string("\\IDL70\\bin\\bin.x86\\idl.dll");
m_IDLDrawX.SetIdlPath(strIdlDllPath.c_str());
m_IDLDrawX.InitIDL(NULL);
执行动态创建和初始化代之后你就可以任意调用IDLDrawWidget Control 3.0控件的接口了。
C++调用IDL程序的做法(二)的更多相关文章
- C++调用IDL程序的做法(三)
作者:朱金灿 来源:http://blog.csdn.net/clever101 在C++调用IDL程序的做法(二)一文中介绍了如何动态创建IDLDrawWidgetControl的做法.假如我 ...
- C++调用IDL程序的做法(一)
作者:朱金灿 来源:http://blog.csdn.net/clever101 IDL是一种数据分析和图像化应用程序及编程语言,先由美国ITT公司所有.最初在七十年代后期用于帮助科学家分析火星探险卫 ...
- Java调用IDL方法总结
Java调用IDL方法总结 Java调用IDL程序,需要先在java中加载IDL的java包(javaidlb.jar),该包不需要下载,在IDL的安装目录中可以直接找到(C:\Program Fil ...
- Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(二)
如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数: double add(double x, double y) { return x + y; } 现在我想要在Matlab中使用它,比 ...
- 汇编语言程序入门实验二:在dos下建立子目录操作
汇编语言程序入门实验二:在dos下建立子目录操作 1,背景 在读此文,并读懂前,建议读者先阅读这两篇博客 1,在dos环境下汇编语言程序设计入门(输出hello world)和masm32的下载.安装 ...
- C#调用java程序
前言: 最近跟项目组的人合作一个项目,由于之前我用的是java写的一个与android通信的程序,现在另一个同事来编写界面程序,由于C#编写起来比较方便,而我又不想重新写之前java的那段代码,于是需 ...
- js调用winform程序(带参数)
我们会发现,我们点击迅雷下载的时候 网页可以调用应用程序,而且连接会传入迅雷,这个是怎么做到的呢? 原理: 先注册表中添加软件的具体信息,然后通过 href 可以直接调用 1.写入注册表信息,注册, ...
- 使用PerfView监测.NET程序性能(二):Perfview的使用
在上一篇博客中,我们了解了对Windows及应用程序进行性能分析的基础:Event Trace for Windows (ETW).现在来看看基于ETW的性能分析工具——Perfview.exe Pe ...
- Java调用Python程序
最近,需要在应用中,需要使用Java程序去调用Python代码,主要有两种实现方式. 一.使用Jython架包 因为调用的Python代码中需要使用Json对象,开始使用jython2.5.2,发现不 ...
随机推荐
- Storm新特性之Flux
Storm新特性之Flux Flux是Storm版本号0.10.0中的新组件,主要目的是为了方便拓扑的开发与部署.原先在开发Storm拓扑的时候整个拓扑的结构都是硬编码写在代码中的,当要对其进行改动时 ...
- 算法-对分查找(二分查找)C++实现
这个是个主要的查找算法.由于仅仅是把数读入就须要(N)的时间量,因此我们在说这类问题的时候都是如果读入过的. 在算法经常使用的时间.将问题缩小为一部分(大约1/2),那么我们就觉得这个算法是O(log ...
- php实现 查找输入整数二进制中1的个数
php实现 查找输入整数二进制中1的个数 一.总结 一句话总结: 1.if($j&intval($num)){}的作用是什么? 1 <?php 2 while($num=trim(fge ...
- AE中Identify查询工具的实现
原文 AE中Identify查询工具的实现 主要实现点击查询并闪烁显示,并把查询要素的信息通过DataGridView显示出来,主要用到的接口: IIdentity.IArray.IIdentifyO ...
- PDFObject.js、jquerymedia.js、pdf.js的对比
由于在做手机项目中需要用到预览pdf文件的需求,一搜还真多,试用后发现兼容性不是很好,大多需要浏览器对pdf阅读的支持: 如果你只是想不依赖浏览器本身对pdf解析的情况下,在手机展示pdf文件,就需要 ...
- 使用vue-cil搭建项目
原文: 简书原文:https://www.jianshu.com/p/1af9b72cf86e 大纲 1.安装NodeJs 2.安装vue-cli 3.创建项目 4.启动项目 5.打包项目 6.项目实 ...
- 移动开发之css3实现背景几种渐变效果
移动端背景渐变,非常的年轻,符合90后年轻一代的审美,css3的这个渐变目前主要是应用在手机前端领域. 产品设计中使用渐变色的好处:1:观众不至于眼睛过于疲劳(如果是浅色背景,3个小时下来极容易造成观 ...
- GAS Syntax
GAS or GNU as syntax is a different form of syntax for assembly language files, known also as AT& ...
- heredoc(实现模板与代码的分离)
heredoc(实现模板与代码的分离) 一.总结 heredoc实现模板与代码的分离,实现的是在后台编程语言中批量输出html代码,在这个批量输出的html代码中又可以嵌套编程语言变量.所以很方便. ...
- VMware虚拟机12安装linux系统详细教程
亲测有效,附图: 工具/原料 VM ware workstation12虚拟机(百度下载) 深度linux镜像ios系统文件 链接:https://pan.baidu.com/s/1RY1Plgru4 ...