我正在开发小型照片应用程序,它应该与佳能EDSDK api配合使用EOS相机。旧的dll(从2014年开始)和老式相机,佳能1100D和1200D一切都运行良好。最近我购买了型号为1300D的succesor。当然,旧的dll(2014)从2016年开始没有认出新的相机型号,我无法连接相机。
所以我更换了旧的dll: EDSDK.dll 和 EdsImage.dll
采用最新的佳能EOS实用程序ver.3,与佳能1300D配合使用。
现在,我的相机被识别出来,在我的主面板上我可以看到连接相机的名称,佳能EOS 1300D。
但在更换dll之后,当我尝试从相机启动实时视图时,我收到了这个奇怪的错误信息:
调用PInvoke函数 'testApp!EDSDKLib.EDSDK :: EdsCreateMemoryStream'失衡了 堆。这可能是因为托管的PInvoke签名没有 匹配非托管目标签名。检查是否正在通话 PInvoke签名的约定和参数与目标匹配 非托管签名
我将非常感谢任何帮助。我已经失去了很多时间。我不再有任何想法,我不知道在哪里寻找答案。
提前谢谢大家。
答案 0 :(得分:2)
版本3.4将一些参数从uint
更改为ulong
。
由于您仍然使用旧的函数定义,因此问题就来自于此。
检查头文件或EDSDK附带的C#文件的区别。
我认为这些功能是您需要改变的功能:
另请注意,DirectoryItemInfo
结构将其Size
字段从uint更改为ulong。
在版本3.2中,PictureStyleDesc
结构已更改。已添加uint SharpFineness
和uint SharpThreshold
字段。