Harap diingat bahwa saya mencengkeram sedotan karena kurangnya info yang mencoba memikirkan mengapa DLL Anda masih ngadat.
Ya benar. Jadi DLL Anda harus mengambil tanggung jawab atas apa yang dilakukannya jika terjadi crashpenggunaan buruk oleh aplikasi panggilanbahasa panggilan tidak dapat diandalkan (MQL4)atau untuk memudahkan penggunaan aplikasi panggilan. Jika DLL sedang diturunkan dan beberapa dari Deinit () Anda belum dieksekusi maka seperti yang Anda katakan objek tesis tidak akan dibebaskan jadi ... Ini adalah pengalaman saya (fitur tidak terdokumentasi!) - dan akal sehat akan mendukungnya - bahwa: Baik fungsi Init () dan DeInit () dalam EA dieksekusi dalam Thread Aplikasi MT4 Utama. Jadi implementasi InitDeInit Anda tidak perlu aman. Hanya Fungsi Mulai () yang dijalankan oleh utas lainnya. Selama Anda tidak memanggil Init () atau DeInit () dari dalam MT4 Anda Mulai () Fungsi Semua akan beres, dan Anda dapat menggunakan Daftar sederhana untuk tujuan tersebut. Ini sedikit berlebihan tetapi praktik yang baik tidak kurang. Jika tidak ada yang lain yang mengingatkan Anda untuk berpikir tentang membersihkan. Jadi dengan pemikiran di atas Anda dapat melakukan sesuatu seperti: Perpustakaan kode Dimasukkan YourDLL; menggunakan SysUtils, Classes; ketik tyourobject = class (tobject) nama pribadi: string; akhir; var SaveExit: Pointer; objs: tlist; fungsi YourNormal_InitObj (pairname: pchar): longint; stdcall; var tmpobj: tyourobject; mulai tmpobj: = tyourobject.create; objs.Add (tmpobj); tmpobj.name: = string (pairname);/lakukan hasil init lainnya: = longint (tmpobj); akhir; fungsi YourNormal_DEInitObj (objptr: longint): longint; stdcall; begin objs.remove (pointer (objptr)); tyourobject (objptr) .free; hasil: = 0; akhir; prosedur LibExit; mulai coba ketika obj.Count gt; 0 mulai//diedit objek Anda (objs # 91; 0 # 93 .gratis; objs.delete (0);//ujung yang diedit;//diedit objs.Free; akhirnya ExitProc: = SaveExit;/kembalikan rantai keluar prosedur akhir; akhir; mengekspor indeks YourNormal_InitObj 1, indeks YourNormal_DEInitObj 2 Anda; mulai SaveExit: = ExitProc;/simpan rantai keluar prosedur ExitProc: = @LibExit;/instal keberatan prosedur keluar LibExit: = tlist.create; akhir.Originally Posted by ;