この問題をきちんと説明できることを願っています!
ReWire オーディオ デバイスを Delphi .dll として実装しようとしています。ReWire が何であるかを知らなくても、心配する必要はありません。重要なのは、私のコードが .dll にコンパイルされることです。ReWire システムから私の .dll への呼び出しを取得して、ディスプレイを開き、ディスプレイが開いているかどうかを確認し、再度閉じます。
起動の呼び出しを受け取ったら、次のことを行います。
if not Assigned(form) then
form := TMyForm.Create(nil);
form.Show;
私の Delphi ライブラリ内のグローバル変数form
はどこですか (おそらく問題ですか?)。のイベントを接続して、作業したいものの配列を準備するなど、いくつかの興味深いことを行いました。MyForm
OnCreate
これまでのところ、すべて順調です。私のフォームには、TOpenDialog
. そのダイアログが閉じるとすぐに、どういうわけかOnCreate
イベントが私のフォームで再び発生していることに気付きました!
OnDestroy
が呼び出されていないことを確認したので、OnCreate
再度呼び出される理由がわかりません。
残念ながら、どの情報が関連しているかはよくわかりませんが、最初の呼び出しスタック (フォームが最初に設定されたとき) は次のとおりです。
予想どおり、ReWire は私の .dll を呼び出して Panel アプリケーションを起動しているので、フォームを作成します。よかった、物事は順調に進んでいる。
次に、フォーム内で小さなダイアログを開き、ファイルを選択して、いくつかの操作を行います。左のフィールドから、OnCreate
再び呼び出されます。その時のコール スタックは次のとおりです。
それは電話のクレイジーなパーティーです!Reaper (一番下) は、アプリケーションをテストするために使用している ReWire ホストですが、そのスタック トレース内で何が起こっているのかわかりません。これは私のコードではないためです。突然、呼び出されなかったので、そうすべきではないと思うときにイベントが呼び出さOnDestroy
れます。
私が考えることができる唯一の他の重要なことは、のアドレスを出力するとSender
、毎回異なるため、どういうわけかCreatedを再度取得するか何かですが、MyForm.Createを1回だけ呼び出すことを確認しました。
この種のことがどのように起こるかについてのアイデアはありますか?