1

特定のハードウェアと対話するためのアンマネージ コードを含む dll を使用しており、C# から使用しようとしていますが、AccessViolationException が引き続き発生します。

何が原因で、どうすれば修正できますか?

namespace FingerPrint {
    public unsafe partial class Form1 : Form {

        [DllImport("MyDll.dll")]
        public static extern int DoesExist();

        public unsafe Form1() {
            InitializeComponent();

            MessageBox.Show(DoesExist() + "");
        }
    }
}
4

1 に答える 1

1

アンマネージ コードのすべてのエラー モードの約 95% で、アクセス違反が発生します。[DllImport] 宣言を間違えると、このような失敗モードを引き起こす可能性があります。しかし、投稿された DoesExist() はトリガーできません。

サポートについては、ベンダーまたは DLL の作成者に問い合わせてください。障害を再現し、デバッガーとソース コードを使用して診断することは、簡単に失敗する場合はほとんど問題がないはずです。

完全を期すために、AccessViolation の最も一般的な原因は次のとおりです。

  • ヒープの破損を引き起こす、アンマネージ コードのメモリ管理バグ
  • データが検証されず、null 逆参照またはバッファ オーバーフローが発生する
  • サポート関数を呼び出すときに失敗の戻りエラー コードをチェックしない
于 2010-04-01T19:31:55.973 に答える