edsdk c#pinvoke函数EdsCreateMemoryStream使堆栈不平衡
我正在开发一个小的摄影应用程序,它应该与佳能EDSDK api和EOS相机一起工作。使用旧dll(从2014年起)和旧相机,佳能1100D和1200D,一切正常。最近我购买了succesor,型号1300D。当然,旧的dll(2014)从2016年起没有识别出新型号的相机,我无法连接到相机 因此,我替换了旧的dll: EDSDK.dll 和 EdsImage.dll 与新的,取自上一个佳能EOS实用程序版本3,这与佳能1300D工程 现在,我的相机被识别,在我的主面板上,我可以看到连接的相机的名称,佳能EOS 1300D 但在更换dll后,当我尝试从摄像头启动live view时,我收到了一条奇怪的错误消息: 对PInvoke函数的调用 “特斯塔普!EDSDKLib.EDSDK::EdsCreateMemoryStream'已使 堆栈这可能是因为托管PInvoke签名没有 匹配非托管目标签名。检查通话是否正常 PInvoke签名的约定和参数与目标匹配 非托管签名 我将非常感谢任何帮助。我已经在这件事上浪费了很多时间。我已经没有任何想法了,我也不知道该在哪里寻找答案edsdk c#pinvoke函数EdsCreateMemoryStream使堆栈不平衡,c#,pinvoke,calling-convention,edsdk,canon-sdk,C#,Pinvoke,Calling Convention,Edsdk,Canon Sdk,我正在开发一个小的摄影应用程序,它应该与佳能EDSDK api和EOS相机一起工作。使用旧dll(从2014年起)和旧相机,佳能1100D和1200D,一切正常。最近我购买了succesor,型号1300D。当然,旧的dll(2014)从2016年起没有识别出新型号的相机,我无法连接到相机 因此,我替换了旧的dll: EDSDK.dll 和 EdsImage.dll 与新的,取自上一个佳能EOS实用程序版本3,这与佳能1300D工程 现在,我的相机被识别,在我的主面板上,我可以看到连接的相机的名
提前感谢大家。版本3.4将一些参数从
uint
更改为ulong
。
由于您仍然使用旧的函数定义,这就是问题的根源。
检查EDSDK附带的头文件或C#文件中的差异
我认为这些功能是您需要更改的:
- EDS下载
- EdsCreateMemoryStream
- EdsCreateMemoryStreamFromPointer
- 埃德斯雷德
- 埃德斯威特
- 埃德塞克
- EdsGetPosition
- 埃德斯盖特长度
- EdsCopyData
DirectoryItemInfo
struct将其Size
字段从uint更改为ulong
在3.2版中,
PictureStyleDesc
struct发生了更改。添加了uint SharpFineness
和uint SharpThreshold
字段。您是否阅读了该消息并按照其建议执行了操作?我们帮不了你,因为只有你有代码。只有你有DLL。如果没有DLL的来源,这将很困难。您是否向供应商寻求帮助。