2013-09-04 53 views
5

Giải pháp Visual Studio 2010 của tôi có dự án C DLL và C#, gọi là C DLL. Giải pháp hoạt động tốt khi được xây dựng trên máy tính Windows-7 Pro 32-bit. Ngày 64-bit Windows 7 Pro, xây dựng ổn, nhưng khi chạy, C# gọi hàm trong DLL và bị lỗi:"Ngoại lệ cơ hội đầu tiên của loại 'System.BadImageFormatException'" sau khi xây dựng trên máy tính 64 bit

A first chance exception of type 'System.BadImageFormatException' 

thiết lập giải pháp Virtual Machine Manager là:

<DLL project> Platform = Win32  (<<< no option to change to "Any CPU") 
<C# project> Platform = "Any CPU" 

Kết quả dưới đây là:

  1. C DLL BUILD OUTPUT

  2. C# BUILD OUTPUT

  3. RUN OUTPUT

C DLL BUILD OUTPUT:

1>------ Rebuild All started: Project: Ultrasound_Frame_Grabber, Configuration: Debug Win32 ------ 
1> Processing ..\..\..\include\USGFWSDK\include\Usgfw2.idl 
1> Usgfw2.idl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oaidl.idl 
1> oaidl.idl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objidl.idl 
1> objidl.idl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.idl 
1> unknwn.idl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wtypes.idl 
1> wtypes.idl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\basetsd.h 
1> basetsd.h 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\guiddef.h 
1> guiddef.h 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ocidl.idl 
1> ocidl.idl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oleidl.idl 
1> oleidl.idl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\servprov.idl 
1> servprov.idl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\urlmon.idl 
1> urlmon.idl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\msxml.idl 
1> msxml.idl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\strmif.idl 
1> strmif.idl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\control.odl 
1> control.odl 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oaidl.acf 
1> oaidl.acf 
1> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ocidl.acf 
1> ocidl.acf 
1> stdafx.cpp 
1> DIBSectn.cpp 
1> sample.cpp 
1> sampleDlg.cpp 
1> Ultrasound_Frame_Grabber.cpp 
1> Generating Code... 
1> Usgfw2_i.c 
1> .NETFramework,Version=v4.0.AssemblyAttributes.cpp 
1>  Creating library C:\Primary\PROJECTS\VasoNova\WORK\Win7 VPS\Debug\Ultrasound_Frame_Grabber.lib and object C:\Primary\PROJECTS\VasoNova\WORK\Win7 VPS\Debug\Ultrasound_Frame_Grabber.exp 
1>strmbasd.lib(mtype.obj) : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification 
1> sample.vcxproj -> C:\Primary\PROJECTS\VasoNova\WORK\Win7 VPS\Debug\Ultrasound_Frame_Grabber.dll 
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ========== 

2) C# BUILD OUTPUT:

1>------ Skipped Rebuild All: Project: VNMath, Configuration: Debug Win32 ------ 
1>Project not selected to build for this solution configuration 
2>------ Skipped Rebuild All: Project: GuiManager, Configuration: Debug Any CPU ------ 
2>Project not selected to build for this solution configuration 
3>------ Rebuild All started: Project: Ultrasound_Frame_Grabber, Configuration: Debug Win32 ------ 
4>------ Skipped Rebuild All: Project: VNCommon, Configuration: Debug Any CPU ------ 
4>Project not selected to build for this solution configuration 
5>------ Skipped Rebuild All: Project: AudioUtility, Configuration: Debug Any CPU ------ 
5>Project not selected to build for this solution configuration 
6>------ Skipped Rebuild All: Project: VNDevices, Configuration: Debug Any CPU ------ 
6>Project not selected to build for this solution configuration 
7>------ Skipped Rebuild All: Project: SimpleRPC, Configuration: Debug Any CPU ------ 
7>Project not selected to build for this solution configuration 
8>------ Skipped Rebuild All: Project: VNSockCommunication, Configuration: Debug Any CPU ------ 
8>Project not selected to build for this solution configuration 
9>------ Skipped Rebuild All: Project: PdfSharp, Configuration: Debug Any CPU ------ 
9>Project not selected to build for this solution configuration 
10>------ Skipped Rebuild All: Project: VNUserControls, Configuration: Debug Any CPU ------ 
10>Project not selected to build for this solution configuration 
11>------ Skipped Rebuild All: Project: GuiServer, Configuration: Debug Any CPU ------ 
11>Project not selected to build for this solution configuration 
3> Processing ..\..\..\include\USGFWSDK\include\Usgfw2.idl 
3> Usgfw2.idl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oaidl.idl 
3> oaidl.idl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\objidl.idl 
3> objidl.idl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.idl 
3> unknwn.idl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wtypes.idl 
3> wtypes.idl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\basetsd.h 
3> basetsd.h 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\guiddef.h 
3> guiddef.h 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ocidl.idl 
3> ocidl.idl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oleidl.idl 
3> oleidl.idl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\servprov.idl 
3> servprov.idl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\urlmon.idl 
3> urlmon.idl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\msxml.idl 
3> msxml.idl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\strmif.idl 
3> strmif.idl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\control.odl 
3> control.odl 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\oaidl.acf 
3> oaidl.acf 
3> Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ocidl.acf 
3> ocidl.acf 
3> stdafx.cpp 
3> DIBSectn.cpp 
3> sample.cpp 
3> sampleDlg.cpp 
3> Ultrasound_Frame_Grabber.cpp 
3> Generating Code... 
3> Usgfw2_i.c 
3> .NETFramework,Version=v4.0.AssemblyAttributes.cpp 
3>  Creating library C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\Debug\Ultrasound_Frame_Grabber.lib and object C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\Debug\Ultrasound_Frame_Grabber.exp 
3>strmbasd.lib(mtype.obj) : warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/INCREMENTAL:NO' specification 
3> sample.vcxproj -> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\Debug\Ultrasound_Frame_Grabber.dll 
12>------ Rebuild All started: Project: MY_APP, Configuration: Debug Any CPU ------ 
C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\MY_APP\FrmMY_APP.cs(291,4): warning CS0162: Unreachable code detected 
C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\MY_APP\FrmMY_APP.cs(441,4): warning CS0164: This label has not been referenced 
C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\MY_APP\FrmMY_APP.cs(1276,13): warning CS0219: The variable 'exportFrmIsUp' is assigned but its value is never used 
C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\MY_APP\FrmMY_APP.cs(91,66): warning CS0067: The event 'VN.Forms.MY_APPForm.m_eventTabletConnectionStatusChanged' is never used 

Compile complete -- 0 errors, 4 warnings 
12> MY_APP -> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\MY_APP\bin\Debug\MY_APP.exe 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\Common.Logging.dll 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\Common.Logging.Log4Net.dll 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\DistributedFileSystem.dll 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\ICSharpCode.SharpZipLib.dll 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\libMobiledevice.dll 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\log4net.config 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\log4net.dll 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\NetworkCommsDotNet.dll 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\protobuf-net.dll 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\QuickLZCompressor.dll 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\SerializerBase.dll 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\SevenZipLZMACompressor.dll 
12> C:\Primary\PROJECTS\my_project\WORK\Win7 VPS\\CommsLibrary\SharpZipLibCompressor.dll 
12>   13 file(s) copied. 
========== Rebuild All: 2 succeeded, 0 failed, 10 skipped ========== 

3) RUN OUTPUT:

'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Primary\PROJECTS\VasoNova\WORK\Win7 VPS\MY_APPG4\bin\Debug\MY_APP.vshost.exe', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_64\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Deployment\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Deployment.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel\v4.0_4.0.0.0__b77a5c561934e089\System.ServiceModel.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceProcess\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.ServiceProcess.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.Extensions\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.Extensions.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled. 
The thread 'vshost.NotifyLoad' (0x197c) has exited with code 0 (0x0). 
The thread '<No Name>' (0x838) has exited with code 0 (0x0). 
The thread 'vshost.LoadReference' (0x1744) has exited with code 0 (0x0). 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Primary\PROJECTS\VasoNova\WORK\Win7 VPS\MY_APPG4\bin\Debug\MY_APP.exe', Symbols loaded. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Primary\PROJECTS\VasoNova\WORK\Win7 VPS\MY_APPG4\bin\Debug\VN.Common.dll', Symbols loaded. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Primary\PROJECTS\VasoNova\WORK\Win7 VPS\MY_APPG4\bin\Debug\GuiServer.dll', Symbols loaded. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Primary\PROJECTS\VasoNova\WORK\Win7 VPS\MY_APPG4\bin\Debug\GuiManager.dll', Symbols loaded. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Primary\PROJECTS\VasoNova\WORK\Win7 VPS\MY_APPG4\bin\Debug\VNUserControls.dll', Symbols loaded. 
'MY_APP.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Primary\PROJECTS\VasoNova\WORK\Win7 VPS\MY_APPG4\bin\Debug\VNSockCommunication.dll', Symbols loaded. 

BƯỚC COMMS 0: MY_APPForm_Load. APP của tôi bây giờ gọi một hàm C TRONG DLL, gây ra lỗi này:

A first chance exception of type 'System.BadImageFormatException' occurred in MY_APP.exe 
+0

Hãy thử khởi động lại vs của bạn một cách đáng ngạc nhiên, nó đã làm việc với tôi !! –

Trả lời

29

Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib...

chương trình bạn đang chạy như một quá trình 64-bit. DLL của bạn chứa mã không được quản lý 32 bit. Kaboom.

Bạn sẽ cần buộc EXE chạy dưới dạng quy trình 32 bit để có thể tải tệp DLL. Nhấn chuột phải vào dự án EXE của bạn trong cửa sổ Solution Explorer. Thuộc tính, tab Xây dựng, thay đổi cài đặt Nhắm mục tiêu nền tảng từ AnyCPU thành x86. Trên VS2012 và chọn tùy chọn "Ưu tiên 32 bit". Lặp lại cho cấu hình Release.

+0

Cảm ơn bạn, Hans. Điều đó giải quyết nó. Lưu ý: Tôi có VS2010 và không thể tìm thấy "Ưu tiên 32 bit". Hans, bạn có đề xuất nâng cấp lên VS2012 không? Nó có đáng không? –

+0

Giải quyết cho tôi quá. Cảm ơn – superachu

+0

Tôi đã có một vấn đề tương tự, với badimageformatexception, nơi tôi đã thêm một dự án bên ngoài đã được xây dựng với mục tiêu nền tảng x86 (tôi đang làm việc trên một máy 64-bit). - Tôi thiết lập dự án bên ngoài để xây dựng thành 'bất kỳ cpu' nào, và tất cả đều tốt :) – phareim