-1

我正在开发小型摄影应用程序,它应该与佳能 EDSDK api 和 EOS 相机一起使用。旧 dll(从 2014 年开始)和旧相机佳能 1100D 和 1200D 一切正常。最近我购买了继任者,型号 1300D。当然,旧的dll(2014)无法识别2016年以来的新型号相机,我无法连接到相机。

所以我替换了旧的 dll:EDSDK.dll 和 EdsImage.dll

新的,取自上一个佳能 EOS Utility 版本 3,适用于佳能 1300D。

现在,我的相机被识别了,在我的主面板上我可以看到连接的相机的名称,佳能 EOS 1300D。

但是在替换 dll 之后,当我尝试从相机开始实时取景时,我收到了这个奇怪的错误消息:

调用 PInvoke 函数 'testApp!EDSDKLib.EDSDK::EdsCreateMemoryStream' 使堆栈失衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配

我将非常感谢任何帮助。我已经在这方面浪费了很多时间。我没有任何想法了,我不知道我应该在哪里寻找答案。

提前谢谢大家。

4

1 回答 1

2

3.4 版将一些参数从 更改uintulong。由于您仍然使用旧的函数定义,这就是问题所在。检查EDSDK附带的头文件或C#文件的差异。

我认为这些功能是您需要更改的功能:

  • Eds下载
  • EdsCreateMemoryStream
  • EdsCreateMemoryStreamFromPointer
  • 编辑阅读
  • 编辑
  • EdsSeek
  • EdsGetPosition
  • EdsGetLength
  • EdsCopyData

另请注意,该DirectoryItemInfo结构将其Size字段从 uint 更改为 ulong。

在 3.2 版中,PictureStyleDesc结构发生了变化。和uint SharpFineness字段uint SharpThreshold已添加。

于 2016-08-17T22:22:57.597 回答