Utilizing a 32-bit DLL in a 64-bit process via COM

2019-01-18 13:56发布

So some time ago I was investigating an issue that I knew would be coming up soon. We have a DLL that links to 32-bit versions of a certain library. There is no x64 version of this library available to us and we have no practical options in regards to replacing it.

When I performed this initial investigation I found an article or two describing a method by which a 64-bit process can utilize a 32-bit DLL (Windows) via a COM "server". Unfortunately I lost the links I had saved and I have now been searching for over an hour with no luck.

Is anyone here familiar with the process I am describing? I can't for the life of me remember which magical incantation I used to pull up the correct result in a search and, of course, it is now implementation time. Thanks in advance for any help you guys can offer, I will continue searching in the meantime.

3条回答
2楼-- · 2019-01-18 14:35

This may not be enough, but it might get you started: Process Interoperability

On 64-bit Windows, an out-of-process 32-bit COM server can communicate with a 64-bit client, and an out-of-process 64-bit COM server can communicate with a 32-bit client. Therefore, if you have a 32-bit DLL that is not COM-aware, you can wrap it in an out-of-process COM server and use COM to marshal calls to and from a 64-bit process.

And Accessing 32-bit DLLs from 64-bit code

Migrating your 32-bit Windows application to a 64-bit machine can be problematic if you have 32-bit DLLs that you cannot re-write. Mike Becker shows you how you can access 32-bit DLLs from 64-bit code using built-in IPC mechanisms...

查看更多
SAY GOODBYE
3楼-- · 2019-01-18 14:35

Client of Out-of-process Local Server is an example of running a COM out of process. If you are running a com server out of process your client can be 64bit and server 32bit.

查看更多
戒情不戒烟
4楼-- · 2019-01-18 14:37

You can create a COM exe or service which will always run as 32 bit. Inside this 32 bit exe, you can access your 32 bit dll which links to 32 bit versions of the library.

The below block diagram explains the basics

Take a look at this link for details:

http://blog.mattmags.com/2007/06/30/accessing-32-bit-dlls-from-64-bit-code/#more-355

查看更多
登录 后发表回答