Knowledgebase

Back to Articles List

I have a problem with my web application making calls to PXCLIB40.dll when running in 64 bit development environment

Problem:

I'm having trouble getting my app to make calls into PXCLIB40.dll when running in a 64bit development environment.
When I use the 64bit version of pxclib40 I get a "BadImageFormatException" and trying the 32bit version consistently gives a "DllNotFoundException" even though both files are placed in the same directory (not at the same time). I have tried changing the target processor type to 32 & 64bit to see if that would make a difference, but it did not.

This is happening in a ASP.Net web application, using C# to call into the dll. I am using VS 2008.
PXCLIB40 is version 4.0.160
My app and the call into the dll work just fine on a 32bit OS using the 32bit version of pxclib40.

Possible Causes and Resolutions

DLL's

Ensure that you are using all the dependant 64 bit DLL's - not just the 64 bit release of pxclib40.

  • e.g. : fm40base.dll, fm40tiff.dll, xcpro40.dll etc (see the help file/pdf manual for the full list)

.NET Framework

A problem exists in the .NET platform specifically - by default all projects use "Any CPU" settings, which means that, on a 32-bit OS, the program will be 32-bit (and use 32 bit DLLs), and on a 64-bit OS, the same program will be 64-bit (and use 64-bit DLLs).p

Of course all DLLs must be 32/64-bit correspondingly, not only PXCLIB40.dll (you should have 32-bit set and 64-bit set, but do not mix them).

And now you have three variants:

  1. Use "Any CPU" setting, and depending on the OS copy 32-bit or 64-bit dll set to program folder.
  2. Always use x86 settings (your program always will be 32-bit) and use the 32-bit dll set.
  3. Create two versions of your program - x86 (32-bit) and x64, and use the corresponding dll set.

Here is full list of required and optional DLLs:
 - xcpro40.dll - main dll, required.
 - xccdx40.dll, pxclib40.dll, ixclib40.dll, dscrt40.dll - required as xcpro40 depends on them.
 - fm40tiff.dll - optional, add tiff image format support when dealing with image files.
 - fm40base.dll - optional, add PNG,JPEG,GIF,PCX,TGA and some other image formats.
 - other fm40*.dlls must be removed
(since ixclib40 will try to load them and this may cause exception in some environments).
If one of these .dlls is 32-bit when another is 64-bit (or vice versa) you will get an error.

Visual Studio WebDev.WebServer.exe

The reason for the BadImageFormatException is that Visual Studio by default runs a 32-bit "WebDev.WebServer.exe" which cannot load a 64-bit ASP.NET application.

Was this article helpful?
Yes No Somewhat