Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
edsdk c#pinvoke函数EdsCreateMemoryStream使堆栈不平衡_C#_Pinvoke_Calling Convention_Edsdk_Canon Sdk - Fatal编程技术网

edsdk c#pinvoke函数EdsCreateMemoryStream使堆栈不平衡

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工程 现在,我的相机被识别,在我的主面板上,我可以看到连接的相机的名

我正在开发一个小的摄影应用程序,它应该与佳能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签名的约定和参数与目标匹配 非托管签名

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


提前感谢大家。

版本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的来源,这将很困难。您是否向供应商寻求帮助。