Run External Procedures From the Window API in a 64bit Progr

Posted by PeterWokke on 30-Jun-2014 05:05

Up to now we have always used the 32bit Progress Client under Progress 10.2B.

Now there is a 64bit Progress client available under Progress 11.3 we have to make our application available for the 64bit client aswell. How to deal with the external procedures like the window API. In our libraries we have these global define settings. How can you check on run time if it is a 32bit or 64bit Progress Client . 

Which values should I use in case of the 64bit client for the following global settings in my application.  

/* libraries */
&GLOBAL-DEFINE USER "user32"
&GLOBAL-DEFINE KERNEL "kernel32":U
&GLOBAL-DEFINE SHELL "shell32":U
&GLOBAL-DEFINE MAPI "mapi32":U
&GLOBAL-DEFINE GDI "gdi32":U
&GLOBAL-DEFINE MMEDIA "winmm":U
&GLOBAL-DEFINE WINSPOOL "winspool.drv":U
&GLOBAL-DEFINE ADVAPI "advapi32":U
&GLOBAL-DEFINE WINSOCK "wsock32.dll":U

All Replies

Posted by Peter Judge on 30-Jun-2014 08:44

In 11.3 there is a new keyword called PROCESS-ARCHITECTURE that you can use in a pre-processor. Eg
 
&if process-architecture eq '32' &then
 &global-define USER 'user32'
  ...
&elseif process-architecture eq '64' &then
 &global-define USER 'user32'
  ...
&endif
 
I'm not sure what the dll equivalents are although you may still be able to use "user32", because MS provides 64-bit DLLs with '32' in the name sometimes. See odbc32.dll for instance: that is the name for both 32- and 64-bit versions of the DLL (in different locations, of course).
 
I've found a good way to determine the bitness of a DLL is to use  this Dependency Walker ( http://www.dependencywalker.com/ ).
 
hth,
-- peter
 
[collapse]
From: PeterWokke [mailto:bounce-PeterWokke@community.progress.com]
Sent: Monday, 30 June, 2014 06:05
To: TU.OE.RDBMS@community.progress.com
Subject: [Technical Users - OE RDBMS] Run External Procedures From the Window API in a 64bit Progress Client
 
Thread created by PeterWokke

Up to now we have always used the 32bit Progress Client under Progress 10.2B.

Now there is a 64bit Progress client available under Progress 11.3 we have to make our application available for the 64bit client aswell. How to deal with the external procedures like the window API. In our libraries we have these global define settings. How can you check on run time if it is a 32bit or 64bit Progress Client . 

Which values should I use in case of the 64bit client for the following global settings in my application.  

/* libraries */
&GLOBAL-DEFINE USER "user32"
&GLOBAL-DEFINE KERNEL "kernel32":U
&GLOBAL-DEFINE SHELL "shell32":U
&GLOBAL-DEFINE MAPI "mapi32":U
&GLOBAL-DEFINE GDI "gdi32":U
&GLOBAL-DEFINE MMEDIA "winmm":U
&GLOBAL-DEFINE WINSPOOL "winspool.drv":U
&GLOBAL-DEFINE ADVAPI "advapi32":U
&GLOBAL-DEFINE WINSOCK "wsock32.dll":U

Stop receiving emails on this subject.

Flag this post as spam/abuse.

[/collapse]

Posted by PeterWokke on 30-Jun-2014 09:15

Peter Thank you for your comment.

The PROCESS-ARCHITECTURE can be used on run time as well to set the global variable values, if I am correct.

On pre-processor it is the installation of the Progress version and not the Progress version of the run time.This last one is related to the session the application is running on. And select the proper DLL.

I know that the 64bit of windows can be addressed with the same name for the most common DLL's.

Wanted be sure if someone know if one of my list need another name.

In the reference manuals related to external program interfaces there is not much on this while Progress 11.3 is the first window client on 64bit.

This thread is closed