2016-08-17 5 views
-1

私は、EOSカメラでCanon EDSDK apiで動作するはずの小さな写真アプリを開発しています。古いdll(2014年以降)と古いカメラ、Canon 1100Dと1200Dですべてうまく動作しました。最近私はsuccesor、モデル1300Dを購入しました。もちろん、古いDLL(2014年)は2016年から新しいカメラモデルを認識せず、カメラに接続できませんでした。edsdk c#pinvoke function EdsCreateMemoryStreamがスタックのアンバランスを起こしました

だから私は古いdllファイルの置き換え:キヤノン1300Dと連携し、最後のキヤノンEOSユーティリティVer.3の、から取られた新しいもの、と EDSDK.dll と EdsImage.dll

を。

私のカメラが認識され、私のメインパネルに接続されたカメラの名前が表示されます。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構造体はULONGにUINTからそのSizeフィールドを変更することに注意してください。

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

関連する問題