Click here to Skip to main content
14,921,505 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Dear Developer,
I Have 32 bit DLL, that i want to use in 64 bit machine.

Please help or guide me.

Thanks in Advance.

Ravi Sharma
Updated 17-Jun-11 2:22am

All 64-bit platforms (there are two Intel instruction-set architectures, IA-64 (Itanium) and x86-64, see[^],[^]) work on the platform of WoW64, see[^].

All three instruction-set Intel architectures are incompatible, but a 32-application is compatible with both 64-bit instruction-set Intel architectures. The problem is: executable modules with different target architectures cannot be used in the same process. The solution with such projects using each other will build into assemblies, but they will crash during run-time.

Now, the delicate aspect is the target platform "Any CPU". As .NET code is JIT-compiled, such executable modules will be JIT-compiled during run-time due to the physical architecture they are loaded on. This is if all the projects were compiled "Any CPU". If not, the actual run-time will be defined by the entry assembly of the application. In case of conflict — see above.

Another problem is P/Invoke which can tie .NET assembly to a certain instruction-set architecture or, just the opposite, link it to a different architecture after moving to 64-bit platform while you require 32-bit version, simply because the DLL under the same names comes in 64-bits. Such problems are more difficult to detect. One good tool to help is Microsoft Dependency Walker, see[^],[^]. You really need to know all your dependencies in unmanaged codes.

Kim Togo 16-Jun-11 16:30pm
Good answer. My 5.
Sergey Alexandrovich Kryukov 16-Jun-11 21:27pm
Thank you, Kim.
divesh12 16-Jun-11 16:33pm
Thank you.
Espen Harlinn 16-Jun-11 17:19pm
Good effort, my 5 as usual :)
Sergey Alexandrovich Kryukov 16-Jun-11 21:27pm
Thank you, Espen.
jayantbramhankar 17-Jun-11 8:25am
Good anwser.
Sergey Alexandrovich Kryukov 17-Jun-11 13:34pm
Thank you.
thatraja 17-Jun-11 10:45am
Good bunch, 5!
Sergey Alexandrovich Kryukov 17-Jun-11 13:35pm
Thank you, Raja.
If your dll is a native 32-bit dll - you could wrap it as a COM server.

Ed Strassberger has a very neat example on how call a 32-bit COM out of process server from a 64-bit client - he answers his own question in this posting:
64-bit client call to 32-bit COM/ATL server EXE fails[^]

Best regards
Espen Harlinn
This is important point to know, my 5. (However, COM supposed to be a temporary work-around, a dead-end path.)
Espen Harlinn 17-Jun-11 12:51pm
Thank you, SAKryukov!
thatraja 17-Jun-11 10:45am
Nice fix link, 5!
Espen Harlinn 17-Jun-11 12:52pm
Thank you, thatraja!
Hope this[^] might help you.

IIRC a reboot is required for it to take effect.

Have you done it.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900