跳转至

从64位IDL访问仅限32位IDL的功能特性

原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/accessing-features-only-available-to-32-bit-idl-from-64-bit-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



![](images/heart.png)

融合点云数据与影像 当计划如期实现时,我欣喜若狂……