作者:朱金灿

来源: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程序的做法(二)的更多相关文章

  1. C++调用IDL程序的做法(三)

     作者:朱金灿 来源:http://blog.csdn.net/clever101 在C++调用IDL程序的做法(二)一文中介绍了如何动态创建IDLDrawWidgetControl的做法.假如我 ...

  2. C++调用IDL程序的做法(一)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 IDL是一种数据分析和图像化应用程序及编程语言,先由美国ITT公司所有.最初在七十年代后期用于帮助科学家分析火星探险卫 ...

  3. Java调用IDL方法总结

    Java调用IDL方法总结 Java调用IDL程序,需要先在java中加载IDL的java包(javaidlb.jar),该包不需要下载,在IDL的安装目录中可以直接找到(C:\Program Fil ...

  4. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(二)

    如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数: double add(double x, double y) { return x + y; } 现在我想要在Matlab中使用它,比 ...

  5. 汇编语言程序入门实验二:在dos下建立子目录操作

    汇编语言程序入门实验二:在dos下建立子目录操作 1,背景 在读此文,并读懂前,建议读者先阅读这两篇博客 1,在dos环境下汇编语言程序设计入门(输出hello world)和masm32的下载.安装 ...

  6. C#调用java程序

    前言: 最近跟项目组的人合作一个项目,由于之前我用的是java写的一个与android通信的程序,现在另一个同事来编写界面程序,由于C#编写起来比较方便,而我又不想重新写之前java的那段代码,于是需 ...

  7. js调用winform程序(带参数)

    我们会发现,我们点击迅雷下载的时候  网页可以调用应用程序,而且连接会传入迅雷,这个是怎么做到的呢? 原理: 先注册表中添加软件的具体信息,然后通过 href 可以直接调用 1.写入注册表信息,注册, ...

  8. 使用PerfView监测.NET程序性能(二):Perfview的使用

    在上一篇博客中,我们了解了对Windows及应用程序进行性能分析的基础:Event Trace for Windows (ETW).现在来看看基于ETW的性能分析工具——Perfview.exe Pe ...

  9. Java调用Python程序

    最近,需要在应用中,需要使用Java程序去调用Python代码,主要有两种实现方式. 一.使用Jython架包 因为调用的Python代码中需要使用Json对象,开始使用jython2.5.2,发现不 ...

随机推荐

  1. MySQL和Python交互

    与Python交互 python3模块名:pymysql conda install pymysql conda install sqlalchemy python2模块名:MySQLdb impor ...

  2. Access WMI via Python from Linux

    You can use Impacket (https://github.com/CoreSecurity/impacket) that has WMI implemented in Python. ...

  3. __block typeof的说明

    1. block不是Object对象,所以对retain无效,要想保留block生命周期,最好通过copy来实现,当然copy后,要记得release. 2.一般被block的应用的对象,retain ...

  4. C#使用wkhtmltopdf.exe,HTML页面转化为PDF文档

    此文用来记录使用wkhtmltopdf.exe在C#代码中将html转换为PDF的过程: 1,在http://wkhtmltopdf.org/downloads.html 下载wkhtmltopdf. ...

  5. POJ 1088 滑雪 DFS 记忆化搜索

    http://poj.org/problem?id=1088 校运会放假继续来水一发^ ^ 不过又要各种复习,功课拉下了许多 QAQ. 还有呀,就是昨天被一个学姐教育了一番,太感谢了,嘻嘻^ ^ 好了 ...

  6. 4、linux开发中常用指令

    1.cat /proc/device 可以查看各个全部字符设备和块设备,在register_chrdev中设置的名字在打印出来的信息中可以看到:2.top 可以看各个应用程序占用CPU量及PID等信息 ...

  7. 2014年武汉的IT行情好像不太好

    本周,加入武汉一起好工作一周了,也就是说本次找工作彻底结束了. 总的来说,求职行情不太行,双方都匹配的工作好少呀. 1. 武汉财富基石,过了一面,第二面没有去.   钱太少,4K多,跳楼价. 2.武汉 ...

  8. ASIC DC综合的理解

    ASIC DC综合的理解 DC综合流程 输入设计文件+指定的工艺库文件+约束文件 经过DC的综合,输出满足期望的门级网表及综合报告 输入输出数据 输入文件:设计文件(verilog等).工艺库(db) ...

  9. word中公式的排版及标题列表

    1.首先建好你的标题,如标题1,标题2等等,你能够依次改变它们的字体,段落等格式,新建格式例如以下图所看到的 红圈处即建立新的格式,你能够建立不论什么你想要的格式,非常方便: 2.当你建立好了多个标题 ...

  10. 剪枝法观点下的旅行商问题(TSP)

    1. 构建基本的穷举搜索骨架 int n; int dst[100][100]; int best; const int INF = 987654321; // 初始状态下,path 存入第一节点,v ...