Link to home
Start Free TrialLog in
Avatar of Corey Scheich
Corey ScheichFlag for United States of America

asked on

Calling X64 COM from VBA

What is the best method for manipulating an x64 COM API from VBA or VB6.  I need to make calls against the API and return values.  I expect to need to make some sort of .Net Wrapper because you cannot load the x64 dlls into a 32bit runtime, I am looking for design recommendations on the communication between the processes.  I would prefer a good MSDN reference, because I need to prove definitively a best practice.  I have already tried searching MSDN to no avail, so I am turning to the experts.

TIA

Corey
ASKER CERTIFIED SOLUTION
Avatar of graye
graye
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Corey Scheich

ASKER

Nice article. Thanks..  we are working with a software that runs as an explorer shell extension on a x64 computer.  My customer however has relied on vba macros for some time because of large company over zealous IT that takes months or years to approve and deliver on custom software.  Anyway they need a concrete solution for working with excel a 32 bit activeX control and the x64 explorer shell extension.
That's just not gonna work...   however, you *can* still use the 32-bit version of the Explorer in x64-based OSs.   There is a 32-bit version in C:\Windows\SysWOW64
graye,

I have tried starting the 32bit version of Explorer on an x64 machine and it started the x64 version.  (no *32 after it in the process tree)  I feel with a well laid out Object structure and proxy classes for the 32bit and 64bit sides it could work.  I don't see why you had the change of heart?

Corey
There are a few web sites out there that talk about using the 32-bit Windows Explorer under a 64-bit OS.   There are generally two techniques... a registry tweak to launch the 32-bit version and the other technique which uses the 32-bit *Internet* Explorer to browse local files.   Personally, the 32-bit Internet explorer sounds a bit easier to do.
The original idea of writing a proxy app to marshal data between the two worlds is still a valid approach... however, if you're trying to get a 32-bit ActiveX control to work in the 64-bit Explorer, and also interact with VBA/Excell... then that's gonna bit more complicated.  I had first assumed that the proxy app would have 1 and only 1 connection (to the Explorer)... and not also support the exposure of interfaces to other outside "clients".
Actually the activeX control is loaded on the 32 bit side, and I agree it would have been much more complicated, though I have seen it done using some sort of webcontrol trickery, which is way past me at this point.  I'll look into the 32 bit explorer option a bit.  Thanks for the information.
Thank you we are going to use the proxy approach using IPC probably .NET Remoting