【IDL】64位IDL中调用32位功能的方法

IDL中某些功能只能在32位下使用,但是现在更多的会使用64位IDL,如果频繁的切换IDL会很麻烦。

可以查看下面的网址了解ENVI/IDL产品功能对操作系统的要求:

http://www.harrisgeospatial.com/Support/HelpArticlesDetail/TabId/219/ArtMID/900/ArticleID/14573/ENVI--ESE-53-and-IDL-85-Platform-and-Feature-Support.aspx

 

比如我们在64位下IDL写了一个功能,但是需要用到DXF格式的数据。而IDL提供的idlffdxf只能支持32位系统,在64位IDL下运行下面的代码会给出平台不兼容的提示。

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$

 

我们可以在64位IDL中启动一个32位进程,代码如下:

IDL> b = idl_idlbridge(ops = 32)

注:当我们使用32位IDL时,不能通过此函数启动64位IDL进程。

 

下面可以编写代码执行DXF格式数据读取功能。

PRO test_idlffdxf
 ;启动32位进程
 b=idl_idlbridge(ops=32)
 ;使用idlffdxf读取心脏数据
 command="heart=obj_new('idlffdxf',"+ $
   "filepath('heart.dxf',subdir=['examples','data']))"
 b.execute,command
 b.execute,"heartTypes=heart.getcontents()"
 b.execute,"tissue=heart.getentity(heartTypes[1])"
 b.execute,"connectivity=*tissue.connectivity"
 b.execute,"vertices=*tissue.vertices"
 ;从32位IDL进程中获取心脏数据到64位IDL
 vertices=b.getvar('vertices')
 connectivity=b.getvar('connectivity')
 ;对象图形法显示心脏三维模型
 oPoly=idlgrpolygon(vertices,poly=connectivity,$
   style=2,color=!COLOR.RED, /shading)
 xobjview,oPoly,SCALE=0.7,title='Heart'
 xobjview_rotate, [1, 0, 0], -70
END

运行效果,一颗红心送给你~~~

注:利用idl_idlbridge同样可以实现多线程并行处理。

posted @   ENVI-IDL技术殿堂  阅读(213)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示