-1

Canon EDSDK APIとEOSカメラで動作する小さな写真アプリを開発しています。古い dll (2014 年以降) と古いカメラ、Canon 1100D および 1200D では、すべて正常に動作しました。最近、後継モデルの1300Dを購入しました。もちろん古いdll(2014)は2016年以降の新型カメラを認識せず、接続できませんでした。

そこで、古い dll を置き換えました: EDSDK.dll と EdsImage.dll

Canon 1300Dで動作する、最後のCanon EOS Utility ver.3から取得した新しいものを使用します。

これで、カメラが認識され、メイン パネルに、接続されているカメラの名前、Canon EOS 1300D が表示されます。

しかし、dll を置き換えた後、カメラからライブ ビューを開始しようとすると、次の奇妙なエラー メッセージが表示されます。

PInvoke 関数 'testApp!EDSDKLib.EDSDK::EdsCreateMemoryStream' の呼び出しにより、スタックのバランスが崩れました。これは、マネージド PInvoke 署名がアンマネージド ターゲット シグネチャと一致しないことが原因である可能性があります。PInvoke シグネチャの呼び出し規約とパラメーターがターゲットのアンマネージド シグネチャと一致することを確認します

どんな助けにもとても感謝します。私はすでにこれで多くの時間を失いました。私にはもうアイデアがなく、どこで答えを探すべきかわかりません。

よろしくお願いします。

4

1 に答える 1

2

バージョン 3.4 では、一部のパラメーターが からuintに変更されましたulong。古い関数定義をまだ使用しているため、これが問題の原因です。EDSDK に付属するヘッダー ファイルまたは C# ファイルの違いを確認します。

これらの関数は、変更する必要があるものだと思います:

  • Edsダウンロード
  • EdsCreateMemoryStream
  • EdsCreateMemoryStreamFromPointer
  • EdsRead
  • エドライト
  • エドシーク
  • EdsGetPosition
  • EdsGetLength
  • EdsCopyData

また、構造体のフィールドが uint から ulong にDirectoryItemInfo変更されたことにも注意してください。Size

バージョン 3.2 ではPictureStyleDesc構造体が変更されました。およびフィールドが追加されましたuint SharpFinenessuint SharpThreshold

于 2016-08-17T22:22:57.597 に答える