2013-05-02 22 views
2

我有一个代码示例,应该检测我的canon 550d数码相机,这样我就可以通过电脑控制相机。 我刚刚下载从这里源文件:为什么我会变得badimagexception?

http://www.codeproject.com/Articles/17344/A-wrapper-for-the-canon-CDSDK-and-PRSDK-for-remote?fid=379739&df=90&mpp=25&noise=3&prof=False&sort=Position&view=Quick&spc=Relaxed&fr=1#xx0xx

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

我第一次运行该程序并单击连接按钮时,发现一个DLL丢失的异常。由于无法添加引用的dll,因此我将它们复制到Debug目录。

缺少DLL是PRSDK.dll,所以我找到并下载了DLL,并将其复制。

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

BadImageFormatException:试图加载程序格式不正确。 (异常来自HRESULT:0x8007000B)

唯一的例外是在文件Camera.cs,就行了:

err = prAPI.PR_StartSDK(); 

我用Google搜索这个异常,并发现,一些人已经改变了项目平台和目标x86,所以我尝试了它 - 我尝试将它更改为x86,x64,AnyCpu,一切,但它没有帮助。

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

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

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

称为项目:Canon_Camera_Control

回答

7

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

DLL文件错误!

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

尝试重新下载它或从官方(Canon)源获取SDK。

+1

这很搞笑。对自己不要下载他的解决方案并看着dll感到羞耻。偶尔我会得到下载的mp3,这些mp3实际上是带有mp3扩展名的404页面;从未在dll下载中看到它。 :D(虽然,有点蹩脚的.net,它不区分“试图加载这个dll,但它是错误的格式”,vs“试图加载这个DLL,你给我什么废话,这是不是甚至没有DLL!“) – neminem 2013-05-02 18:08:24

+0

Carko哪些文件不是.dll?我在PRSDK.dll和DPPDLL.dll上做了属性,例如这两个dll文件,我在属性中看到:应用程序扩展名(.dll)是否可以请你指定哪些文件不是.dll我的意思是不是真的dll,你是怎么做到的设法发现他们不是DLL,所以我会知道在未来做到这一点? – 2013-05-02 18:10:11

+0

Carko你的意思是这两个文件是不是真的DLL? PRLIB.dll和PRSDK.dll – 2013-05-02 18:11:27

1

你一定错过了一些东西。这个错误肯定是说你的项目的平台和外部DLL的平台不匹配。

也许您更改了“主动解决方案平台”,但没有更改“项目平台”。

+0

尝试任何平台和目标:x86然后x64然后所有平台。在任何地方改变没有任何工作。有人可以从我的skydrive下载该项目并试用它,也许可以找出问题/解决方案? – 2013-05-02 17:41:07

1

有一件事让我不知道这件事,不久之前:请检查以确保(Build-> Configuration Manager),在您的解决方案中,当您将解决方案的平台更改为x86时,实际项目的平台在那个对话框实际上被设置为x86。有时VS是愚蠢的,并且将它保留为任何CPU(如果你的所有代码和所有第三方DLL都是托管的,那么它就不是很好,例如,对于非托管相机dll的包装。)

这可能是一个完全不相关的事情正在进行,但每次我看到这个错误,这是因为你正在运行x86/x64并加载一个非托管dll,这是另一种平台类型。

0

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

my blog我概括这个问题上多与截图上,你可以如何改变它

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

相关问题