comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: Call external 64bit
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: Call external 64bit [message #67289 is a reply to message #67277] Mon, 13 July 2009 12:36 Go to previous messageGo to previous message
Toolbox is currently offline  Toolbox
Messages: 2
Registered: July 2009
Junior Member
On Jul 13, 1:10 pm, Toolbox <tool....@live.com> wrote:
> On Jul 13, 8:56 am, FÖLDY Lajos <fo...@rmki.kfki.hu> wrote:
>
>
>
>> On Mon, 13 Jul 2009, Wox wrote:
>>> Hi
>
>>> Calling a 32bit dll from IDL 64 bit doesn't work (see below). Is this
>>> normal behaviour?
>
>>> IDL> print,!version
>>> { x86_64 Win32 Windows Microsoft Windows 7.1 Apr 21 2009      64 64}
>>> IDL> print,call_external('test.dll','test',2u,/ALL_VALUE,/I_VALUE )
>>> % CALL_EXTERNAL: Error loading sharable executable.
>>>                 Symbol: test, File = Test.dll
>>>                 %1 is not a valid Win32 application.
>
>>> Normal behaviour (IDL 32bit):
>>> IDL> print,!version
>>> { x86 Win32 Windows Microsoft Windows 7.1 Apr 21 2009      32      64}
>>> IDL> print,call_external('test.dll','test',2u,/ALL_VALUE,/I_VALUE )
>>>   10
>
>>> Dll file used:http://xrdua.ua.ac.be/public/Test.dll
>
>> I think this is normal. You can not mix 32 and 64 bit code in a single app
>> (eg. call_external passes 64 bit pointers to the DLL while the DLL expects
>> 32 bit ones).
>
>> regards,
>> lajos
>
> There is an undocumented keyword in IDL 7.1 (and a few minor versions
> earlier) on the idl_idlbridge object that will allow you to do what
> you want.  (Of course, all caveats apply.)  The keyword is "ops" and
> it lets you set the bit mode of the slave OPS process that loads idl
> that you intereact with via the idl_idlbridge object.  By default, the
> slave OPS uses the same bit mode as the master IDL process that
> created it.  But, the undocumented "ops" keyword let you override it.
> For example, you can have the following combinations:
>
> master: 64-bit   slave: 32-bit
> master: 32-bit   slave: 64-bit
>
> Usage: o = obj_new('idl_idlbridge',ops='32') ; create a 32-bit slave
> idl process
>
> You can then use the 'setvar' & 'getvar' methods on the newly created
> idl_idlbridge object to marshal data between the different bit mode
> processes.
>
> So, for your example, you could do the following from within the
> master, 64-bit IDL process:
>
> IDL> o32 = obj_new('idl_idlbridge',ops='32')
> IDL> o32->execute, "dlm_load, 'test' "
> IDL> o32->execute, "a = test_function(42)"
> IDL> local_a = o32->getvar('a')
>
> This would load your 32-bit 'test' DLM functionality into the 32-bit
> slave process.  Call a function in your 32-bit DLM called
> 'test_function' that creates a variable named 'a' at the $MAIN scope
> level in your 32-bit slave process.  Then, marshal variable 'a' back
> to the 64-bit master process using 'getvar'.
>
> You can also create as many mixed 32-bit and 64-bit slave processes
> from the same master process as you want.  This would let you do
> things like test the 64-bit port of your old 32-bit DLM at the same
> time by creating a 32-bit slave process and 64-bit slave process and
> sending commands to each and verify the results. For example:
>
> IDL> oOld = obj_new('idl_idlbridge',ops='32') ; creates a 32-bit slave
> process
> IDL> oNew = obj_new('idl_idlbridge',ops='64') ; creates a 64-bit slave
> process
> IDL> oOld->execute, 'aOld = dosomething()'    ; execute 32-bit code
> IDL> oNew->execute, 'aNew = dosomething()'    ; execute 64-bit code
> IDL> local_aOld = oOld->getvar('aOld')
> IDL> local_aNew = oNew->getvar('aNew')
> IDL> bEqual = compare_values(local_aOld, local_aNew)
>
> Don't try using the "ops" keyword on a run-time distribution: only on
> a full installation.
>
> Regards,
> Toolbox

Update: If you get an error using quotes around the "ops" keyword
value, e.g. ops='32', try it without the quotes, e.g. ops=32
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Previous Topic: Re: An approximation of the cumulative integral of Y
Next Topic: Contour lines are disappearing

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Sat Oct 11 21:44:12 PDT 2025

Total time taken to generate the page: 1.75777 seconds