0

nugent と vb.net を使用して MQL4 で使用する dll をまとめていますが、これまでのところかなりうまくいっています。

私のdllでは、関数が呼び出されるたびにチェックし続ける必要がないように、条件が満たされたときにフラグを設定しています。これは正常に動作しますが、チャートから dll を作成した EA を削除しても、フラグが設定されたままメモリ内にあることに気付きました。

フラグは、モジュール内の関数内で static として宣言されています。

ターミナルを閉じてから再度開くと、フラグが消えてプロセスが再開されます。

メモリから dll を削除し、EA の削除時にそのリソース (静的変数) を解放するにはどうすればよいですか?

deinit で関数を呼び出す必要があるのではないかと考えていますが、DLL 自体を「殺す」という VB.net の例が見つかりません。

どんなアイデアでも大歓迎です。

スティーブ

更新:私はちょうど考えていました。おそらく、チャートから EA を削除すると、dll が終了するはずがありませんか? 設計上そうなっているのでしょうか?もしそうなら、フラグを手動でfalseに設定するだけでいいと思います。

しかし、EA をチャートに再度追加すると、dll の別のインスタンスが存在することになるのではないでしょうか?

誰かが決定的な答えを持っていれば、それは素晴らしいことです。

4

1 に答える 1

0

MQL4 で使用される DLL は、MT4 によって提供される機能を拡張できる関数を公開します。DLL について私が理解していることから、DLL はデータ保持を提供しません。同様に、あなたの場合、MT4 コードで DLL の関数を呼び出すと、その呼び出しの間、データが保持されます。EA を再起動すると、データはなくなり、すべてがデフォルト値に戻ります。

お役に立てれば。

于 2013-03-27T14:34:19.663 に答える