2016-08-17 54 views
-1

我正在開發小型攝影應用程序,該應用程序應該可以與EOS相機一起使用Canon EDSDK api。一切運行良好與老dll的(從2014年)和舊相機,佳能1100D和1200D。最近我購買了模型1300D的succesor。當然,老dll(2014)從2016年開始並未認可新款相機,而且我無法連接到相機。edsdk c#pinvoke函數EdsCreateMemoryStream已經不平衡

所以我取代舊的DLL: EDSDK.dll 和 EdsImage.dll

用新的,從去年佳能EOS Utility的ver.3的,與佳能1300D拍攝的作品。

現在,我的相機被識別出來,在我的主面板上,我可以看到相機Canon EOS 1300D的名稱。

但更換dll的,當我嘗試啓動從相機取景後,我得到這個奇怪的錯誤消息:

到PInvoke的功能 「!testApp EDSDKLib.EDSDK :: EdsCreateMemoryStream」呼叫具有不平衡 堆棧。這很可能是因爲託管PInvoke簽名不與 匹配非託管目標籤名。檢查的PInvoke簽名的調用約定 和參數匹配目標 非託管簽名

我將是任何幫助,非常感謝。我已經失去了很多時間。我再也沒有任何想法,我不知道我應該在哪裏尋找答案。

謝謝大家提前。

+1

您是否閱讀過該消息並執行其中的建議?我們無法提供幫助,因爲只有你有代碼。只有你有DLL。沒有DLL的源代碼就很難。你有問過供應商的幫助。 –

回答

1

版本3.4將一些參數從uint更改爲ulong。 由於您仍然使用舊的函數定義,因此這是問題出處。 檢查EDSDK附帶的頭文件或C#文件的差異。

我認爲這些功能是那些你需要改變:

  • EdsDownload
  • EdsCreateMemoryStream
  • EdsCreateMemoryStreamFromPointer
  • EdsRead
  • EdsWrite
  • EdsSeek
  • EdsGetPosition
  • EdsGetLength
  • EdsCopyData

還要注意的是DirectoryItemInfo結構改變了Size場從UINT到ULONG。

在版本3.2中PictureStyleDesc結構已更改。添加了uint SharpFinenessuint SharpThreshold字段。