2

我有一个代码示例,可以检测我的佳能 550d 数码相机,这样我就可以从电脑控制相机。我刚刚从这里下载了源文件:

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=轻松&fr=1#xx0xx

我在 Visual Studio 2012 Pro 中创建了一个新项目;我的电脑运行的是 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

4

4 回答 4

7

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

您的 DLL 文件错误!

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

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

于 2013-05-02T18:04:16.473 回答
1

就在不久前,有一件事让我很困惑:检查以确保(构建->配置管理器)在您的解决方案中,当您将解决方案的平台更改为 x86 时,该对话框中实际项目的平台是实际上设置为x86。有时 VS 是愚蠢的,并将其保留为 Any CPU(如果您的所有代码和所有第三方 dll 都是托管的,那就太好了,如果您正在调用,例如,非托管相机 dll 的包装器,则不是很好。)

可能发生了一些完全不相关的事情,但每次我看到该错误都是因为您以 x86/x64 运行并加载了另一个平台类型的非托管 dll。

于 2013-05-02T17:04:45.980 回答
1

你一定错过了什么。该错误绝对是表明您的项目平台与外部dll之一不匹配的错误。

也许您更改了“活动解决方案平台”而不是“项目平台”。

于 2013-05-02T17:00:10.200 回答
0

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

我的博客上,我通过屏幕截图更多地概述了这个问题,说明如何更改它

但基本上您可以将您的项目设置为始终以 32 位模式编译。

于 2013-05-02T17:18:55.913 回答