• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 373
  • Last Modified:

Imported DLL crashed when run in 64-bit PC

Hi experts
My c# project imports a DLL generated by C code, and my program calls one method in the imported DLL. Everything works fine in 32-bit PCs (XP and 7).

But the trouble is it crashes in 64-bit (Windows 7) PC.

Some Internet articles suggested to change the Build environment to "x86".
I did that to the StartUp project of my program (which consists of several projects). I right-clicked on the StartUp project, selected Properties, and I changed "Platform target" to "x86". I also did that at the top of the menu bar. (Please refer to the screenshot).

But the problem is still the same. Could someone tell me how I might fix this crash issue?
Thanks.
64bit.JPG
0
dominicwong
Asked:
dominicwong
  • 5
  • 3
1 Solution
 
AndyAinscowFreelance programmer / ConsultantCommented:
Your C code dll is probably 32 bit.
You can not (not directly) mix a 32 bit dll into a 64 bit application.  That is why the internet articles suggest compiling as x86 to keep it all as 32 bit.

I guess the dll is actually calling another dll or windows system API which isn't available in a 32 bit version on the 64 bit machine.  You could try using dependancy walker to look into the C dll that you have.

http://www.dependencywalker.com/
0
 
dominicwongAuthor Commented:
Hi Andy
The imported C code dll is 32 bit. It was written by someone else in the company. Therefore I have the source code. The C code doesn't call any other dll or windows system API.

I don't understand why the executable still doesn't run in 64 bit PC despite already compile in x86 (as per the screen shot attached to the question). Do you think I'd missed out anything in my settings?

Thanks.
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
>>Do you think I'd missed out anything in my settings?
Have a look at the menu point build : configuration manager.  In the picture at the top you have Active Any CPU, make a new configuration specifically for x86.  Maybe that will make a difference.

As you have the source code it might be simplest to compile a 64 bit version for the 64 bit operating systems.
0
Cloud Class® Course: MCSA MCSE Windows Server 2012

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

 
dominicwongAuthor Commented:
thanks Andy.
with your other suggestion will I end up having two executables: one for 32bit and one for 64bit PCs?
0
 
AndyAinscowFreelance programmer / ConsultantCommented:
>>one for 32bit and one for 64bit PCs?
Yes.  (ps.  Numbers of commercial products have the same, two builds 32 and 64 bit.)
0
 
dominicwongAuthor Commented:
I checked the "Configuration Manager". The "Active solution platform" is already "x86".
0
 
dominicwongAuthor Commented:
Thanks Andy for your help.
I will submit a separate question for compiling app into 32bit.
0
 
dominicwongAuthor Commented:
The problem is resolved. In my case, the trick is to change only the 'Platform Target' but leave the Configuration Manager unchanged.
Thanks for your help again. :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now