ストラテジーテスター、DLL、およびFreeLibrary()
Results 1 to 2 of 2

Thread: ストラテジーテスター、DLL、およびFreeLibrary()

  1. #1
    私はこの問題をあちらこちらで、特に7bitで見てきましたが、私はこの問題を回避することができませんでした:

    egyテスタはdeinit()の間にロードされたライブラリの参照カウントを適切に減らしません。このため、DLLファイルはシステムにロードされたままになり、再度テスターを実行しようとするとクラッシュします。

    私はGetModuleHandle()とFreeLibrary()を使おうとしました、しかしそれは問題を解決しないようでした。

    (IsTesting()){コードを挿入しました。印刷(dll_handle); if(dll_handlegt; 0)FreeLibrary(dll_handle);訂正:
    dll_handleは0以外の数値を返し、FreeLibraryはそれをデクリメントします。

    もう一度GetModuleHandle()をチェックすると、0が返されます。これは、ライブラリがアンロードされたことを意味します。

    しかし、もう一度テスターを起動しても、まだクラッシュします。

    私は最適化機能を使うことができないので、これはかなりいらいらしています。

    正確にはどうなりますか? DLLのグローバル変数は、最後の実行のデータによって初期化され、汚染されたままになっていますか?それとも、すでに初期化されたDLLを介してDLLを初期化しようとしたときにエラーが発生しますか?

  2. #2

    Quote Originally Posted by ;
    しかし、もう一度テスターを起動しても、まだクラッシュします。私は最適化機能を使うことができないので、これはかなりいらいらしています。正確にはどうなりますか? DLLのグローバル変数は、最後の実行のデータによって初期化され、汚染されたままになっていますか?それとも、すでに初期化されたDLLを介してDLLを初期化しようとしたときにエラーが発生しますか?
    これはDLL内の問題を示しています。すべてのメモリ/オブジェクトを正しく破棄/解放しているわけではありません。または、おそらく再起動中にポインタまたはもう存在しないものへの参照を使用しているときにクラッシュする原因と考えられます。 DLLを見ないでこれが正確に何であるかを言うのは不可能です。 1)あなたのDLLのinitdeintに注意を払うこと2)DLLがアンロードされなかったのでそれを使用しないでください。ここから、DLLを初期化するためにMT4から呼び出す関数にコードを配置してください。 3)initルーチンの外部で作成されたメモリ/オブジェクトがDeinit中に処理されていることを確認します。次のような方法で、DLLのinitdeintを修正してみてください。/オブジェクトポインタはnilに初期化されるmemptr:pointer = nil; func DLL_INIT()//MT4から呼び出されたinit(){if(objptr == nil)objptr = somobject.create();/mem_tr = getmem(somememory);/オブジェクトを作成する} func DLL_some routine()//mt4からEAのどこかで呼び出される。/メモリで何かをしています...この関数の最後で//メモリを解放しません。 } func DLL_Deint()//mt4から呼び出されたdeinit(){if(objptr!= nil){objptrfree;} objptr = nil; if(memptr!= nil){freemem(memptr、somememory);} memptr = nil。このようにしてすべてのメモリ/オブジェクト/動的変数を作成/割り当てする場合は、存在しないものを参照しないようにする必要があります。

投稿権限

  • Youma新しいスレッドを投稿しない
  • Youmaは返信しない
  • あなたは添付ファイルを投稿しないかもしれない
  • Youma Notedityourposts
  •  
  • スマイリーはオンです
  • スマイリーはオンです
  • [IMG]コードがオンです
  • [VIDEO]コードがオンです
  • HTMLコードがオフです
This website uses cookies
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.