从64位IDL访问仅限32位IDL的功能特性
17013 为本文评分:
暂无评分
从64位IDL访问仅限32位IDL的功能特性
Jim Pendleton 2016年6月9日,星期四
并非所有在32位模式下可供IDL和ENVI使用的功能都能在64位模式下使用,反之亦然。
我们的在线文档中有多个表格列出了对各种平台的支持情况。
如果您在64位平台上,可以选择在32位或64位模式下启动IDL。但这并没有真正解决问题。
例如,假设您有一个在64位IDL中执行的主应用程序,但您希望访问DXF格式文件中的数据。如果您尝试创建一个用于解析此文件格式的IDLffDXF对象实例,您将收到一个错误:
IDL> heart = obj_new('idlffdxf', filepath('heart.dxf', subdir = ['data']))
% OBJ_NEW: Dynamically loadable module is unavailable on this platform: DXF.
% Execution halted at: $MAIN$
我们可以在32位模式下启动第二个IDL命令行或Workbench会话来解析该文件,但一个更方便的方法,也是我们希望在编译例程中实现解决方案的方式,是通过IDL_IDLBridge对象。有一个名为OPS的特殊关键字(技术上称为"进程外服务器"),它允许我们设置桥接进程应该在32位还是64位模式下运行。
在这里,我们将从我们的64位IDL会话中启动一个32位IDL进程。
IDL> b = idl_idlbridge(ops = 32)
% Loaded DLM: IDL_IDLBRIDGE.
显然,如果您在32位平台上(现在还有吗?!),您不能仅凭IDL关键字的魔力就创建一个64位进程。
我们可以构建一个命令,在我们的32位进程中执行以读取数据。
IDL> command = "heart = obj_new('idlffdxf', filepath('heart.dxf', subdir = ['examples','data']))"
IDL> b->execute, command
现在,我们可以继续处理IDLffDXF::GetEntity方法文档中的一个示例,将数据传输回我们的主进程进行显示。
IDL> b->execute, "heartTypes = heart->getcontents()"
IDL> b->execute, "tissue = heart->getentity(heartTypes[1])"
IDL> b->execute, "connectivity = *tissue.connectivity"
IDL> b->execute, "vertices = *tissue.vertices"
IDL> vertices = b.getvar('vertices')
IDL> connectivity = b.getvar('connectivity')
现在,我们在64位进程中拥有了来自32位进程的顶点和连接关系列表数据的本地副本,我们可以显示结果了。
IDL> poly = idlgrpolygon(vertices, poly = connectivity, style = 2, color = !color.red)
IDL> xobjview, poly
