イムは、Visual Studioで2010.NETおよびアンマネージドDLLは - >メモリの問題
をアンマネージドDLLを作成し、私のDLLをテストするために、私は、Visual Basicで別のプロジェクトを作成していると私は解決策にそれを添付しました。
VBでは、VBでInstallHook関数を呼び出し、VBでコールバック関数のデリゲートを渡します。次に、DLLがフックを作成し、キーが押されるたびにVBコールバックが呼び出され、キーと他のいくつかのパラメータが引数として受け取られます。
問題は、一部のキーを押してVBコールバックのバッファが特定のサイズに達した後にプログラムがクラッシュすることです。具体的には、コールバックが最後に呼び出され、VBでバッファに書き込まれるとき、次回コールバックがDLLで呼び出されるため、プログラムのクラッシュが到達せずにどこかで重複しているようですコールバック(DLL内のポインタは問題ありません)
.NETのアーキテクチャはよくわかりませんが、何が間違っているのか正確にはわかりませんが、私がやったコードには非常に自信があります。 .Netのメモリ管理技術。
編集:私は、VBコード内からコールバックを呼び出すと、それはうまく動作すると言って忘れてしまった。コールバックは通常、同じウィンドウにインストールされたWndProcから呼び出されます。
おかげで....
問題が解決しました。これは、コールバックポインタを設定したDLLのInstallHookと同じサブディレクトリにデリゲートをローカルで宣言していたために発生しました。デリゲートのスコープとDLLのクラッシュが発生します。 デリゲートをVBコードのグローバルセクションに移動するだけで問題が解決しました... ありがとうReed Copsey :) – lqbweb