为什么我得到badmagexception

本文关键字:badmagexception 为什么 | 更新日期: 2023-09-27 18:11:46

我有一个代码样本,应该检测我的佳能550d数码相机,所以我可以从pc控制相机。我刚从这里下载了源文件:

http://www.codeproject.com/Articles/17344/A-wrapper-for-the-canon-CDSDK-and-PRSDK-for-remote?fid=379739& df = 90, mpp = 25,噪音= 3,教授= False& sort = Position&视图= Quick&程控= Relaxed& fr = 1 # xx0xx

我在Visual Studio 2012 Pro中创建了一个新项目;我的电脑运行的是Windows 8 64位。我添加了所有的。cs文件,并复制了注册后从佳能网站下载的所有dll文件。

我第一次运行程序并点击连接按钮时,我得到了一个异常,dll丢失了。由于没有办法添加引用的dll,我将它们复制到Debug目录。

丢失的dll是PRSDK.dll,所以我找到并下载了dll,并复制了它。

现在当我点击连接按钮,我得到一个不同的异常:

BadImageFormatException:试图加载格式不正确的程序。(Exception from HRESULT: 0x8007000B)

异常在文件Camera.cs中,在下面一行:

err = prAPI.PR_StartSDK();

我在谷歌上搜索了这个例外,发现有些人把项目平台和目标改成了x86,所以我试了试——我试着把它改成x86, x64, AnyCpu,所有的,但它没有帮助。

也许PRSDK.dll文件是旧的,不能在Windows 8中使用?

这是一个链接到我的项目/解决方案在我的SkyDrive,如果有人可以下载它,并尝试在他的机器上运行它,也许会找到一个解决方案?

https://skydrive.live.com/redir?resid=EB1C71C44C3976D5 ! 201, authkey = !AErpIgyllPAgH9w

项目名为:Canon_Camera_Control

为什么我得到badmagexception

好的,我下载了你的项目,发现了问题。

您的DLL文件错误!

它们实际上甚至不是DLL,它们是扩展名为. DLL的html文件。显然你试图从某个网页下载它们,但没有成功。

尝试重新下载或从官方(佳能)来源获取SDK。

你一定错过了什么。这个错误肯定是指项目的平台和外部dll的平台不匹配。

可能您更改了"Active solution platform"而没有更改"Project platform"

关于这一点,我绊倒了一件事,不久前:检查确保(构建->配置管理器),在您的解决方案中,当您将解决方案的平台更改为x86时,该对话框中实际项目的平台实际上设置为x86。有时VS是愚蠢的,并把它作为任何CPU(如果你的所有代码和所有第三方dll都是托管的,那就太好了,如果你调用,例如,一个包装器到一个非托管的相机dll)。

有可能是完全不相关的事情发生了,但每次我看到这个错误,这是因为你运行的是x86/x64,并加载了一个非托管的dll是其他平台类型的

原因之一是您可能试图将32位程序集加载到64位应用程序中。当您选择了Any CPU平台时,就会发生这种情况。

在我的博客上,我用截图详细介绍了这个问题

但是基本上你可以设置你的项目它总是在32位模式下编译