Polusi Memori MT4 DLL - Page 4
Halaman 4 dari 465 FirstFirst ... 2345 TerakhirTerakhir
Results 31 to 40 of 41

Thread: Polusi Memori MT4 DLL

  1. #31
    Quote Originally Posted by ;
    Terima kasih atas semuanya 7bit, jawaban dan kontribusi Anda luar biasa !! Jadi mungkin saya punya pertanyaan: Anda mengatakan:
    Quote Originally Posted by ;
    Untuk membuat proyek DLL baru (jika Anda memulai Lazarus untuk pertama kalinya) klik pada Proyek perpustakaan proyek baru. Beri nama yang bermakna dan simpan ke folder kosong. Proyek ini awalnya hanya terdiri dari dua file. File .lpi yang berisi semua pengaturan kompiler dan dan .lpr yang berisi kode sumber, kedua file ini adalah semua yang Anda perlukan untuk cadangan, sampaikan kepada kolega Anda atau kelola dalam repositori kode sumber. Unit tambahan (jika Anda memutuskan untuk membagi proyek yang lebih besar) disimpan sebagai file .pas individu.
    Tetapi ketika saya membuat proyek baru sebagai dll, lazarus sebenarnya menghasilkan lebih banyak file:
    Kemudian, ketika saya mencoba untuk mengkompilasi proyek saya, itu tidak menghasilkan dll tetapi file .exe Maksud saya dalam kasus .dll itu memang menghasilkan .exe satu. Saya sudah mencoba banyak waktu sejak 2 jam, juga hanya menyalin paste kode Anda di dalam proyek perpustakaan baru. Itu memberi: Perpustakaan kode yang dimasukkan Project1; {$ mode objfpc} {$ H } menggunakan Kelas {Anda dapat menambahkan unit setelah ini}; {$ IFDEF WINDOWS} {$ R AHL1.rc} {$ ENDIF} mulai akhir. Tapi kemudian, ketika dikompilasi hanya menghasilkan .exe. Saya google untuk mencari jawaban untuk masalah ini tetapi tampaknya itu terjadi dengan yang lain, tetapi tidak ada jawaban: jadi apakah saya melewatkan sesuatu dalam konfigurasi mungkin?

  2. #32

    Quote Originally Posted by ;
    Tetapi ketika saya membuat proyek baru sebagai dll, lazarus sebenarnya menghasilkan lebih banyak file:
    .Lpi dan .lpr adalah yang berisi semua informasi, yang lain dihasilkan. Mengenai tangkapan layar Anda: Saya tidak dapat melihat apa pun di sana. Harap matikan menyembunyikan ekstensi nama file di windows explorer Anda. Bagaimana Anda bisa produktif menggunakan komputer Anda jika Anda telah mengaturnya untuk menyembunyikan setengah dari setiap nama file (setengah penting bahkan) dari Anda (dan dari saya ketika saya melihat screenshot Anda)?
    Quote Originally Posted by ;
    Kemudian, ketika saya mencoba untuk mengkompilasi proyek saya, itu tidak menghasilkan dll tetapi file .exe Maksud saya dalam kasus .dll itu memang menghasilkan .exe satu.
    Saya tidak bisa mereproduksi ini. Jika saya membuat proyek perpustakaan baru dan kemudian segera mengkompilasinya tanpa melakukan apa-apa lagi maka saya akan menemukan file .dll dengan nama proyek di dalam folder libi386-win32. Jika saya menetapkan nama file target dalam opsi proyek saya akan mendapatkan file .dll di folder proyek. Jika saya memberinya nama tanpa ekstensi .dll maka saya juga akan berakhir dengan benar dengan file .dll. Jika saya salahtidak sengaja telah menetapkan nama file target yang diakhiri dengan .exe maka tentu saja akan menamai file .exe seperti yang diminta tetapi tidak akan menjadi exe, masih akan menjadi .dll, hanya dengan nama yang salah.

  3. #33

  4. #34
    1 Lampiran
    Quote Originally Posted by ;
    Hai, ini berfungsi sekarang! Ya Anda benar saya harus mengatur pengaturan windows saya dengan cara yang lebih teknis! Jadi dalam semua kasus, sekarang Lazarus mengkompilasi .dll sesuai dengan pilihan jenis proyek saya. Tetapi saya harus melakukan sesuatu yang sedikit berbeda: dengan tulus sampai itu secara sistematis menyusun .exe. Jadi saya harus membuat proyek baru dan memilih jenis yang sama sekali berbeda, baik aplikasi .exe atau dll, saya memilih konsol FPC Unit dll ... lalu mengkompilasi proyek di bawahnya.Saya menutupBuka Lazarus lagidan membuat proyek baru sebagai perpustakaan (dll), jadi sekarang sudah berfungsi dengan baik. Mungkin itu bisa berupa memori cache atau sesuatu di suatu tempat dan perlu diatur ulang ... atau mungkin karena instalasi saya baru. Terima kasih untuk semuanya 7bit!

  5. #35
    Baru saja menemukan ini yang mungkin relevan untuk masalah dengan
    http://www.lazarus.freepascal.org/in....msg39170.html

  6. #36

    Quote Originally Posted by ;
    Mungkin Delphi agak buggy dan tidak melakukan ini dengan benar. Mungkin Anda harus mencoba mengubahnya secara eksplisit menjadi ansistring terlebih dahulu:
    Kode yang dimasukkan # 91; b # 93; fungsi # 91;b # 93; foo (x: dua kali lipat; y: PChar): PChar; stdcall; # 91; b # 93; var # 91;b # 93; s: ansistring;/referensi dihitung dan string yang dikelola memori. # 91; b # 93; mulai # 91;b # 93; # 91; color = SeaGreen # 93;/PChar kita akan disalin ke ansistring # 91;color # 93; # 91; color = SeaGreen # 93; # 91; b # 93; # 91; color = SeaGreen # 93; otomatis # 91;color # 93; # 91;b # 93 ;,/# 91; b # 93; # 91; color = SeaGreen # 93; (yah, mungkin tidak secara otomatis dalam delphi, jadi cobalah untuk mengonversikannya secara ekplisit) # 91;warna # 93; # 91;b # 93;/tidak perlu khawatir tentang detail memori yang buruk. # 91;color # 93; s: = 'Hello' FloatToStr (x) '' # 91; color = Red # 93; ansistring (y) # 91;color # 93; '!'; # 91; color = SeaGreen # 93;/lemparkan kembali ke pointer. Metatrader akan menyalin string/dari pointer ke memori itu sendiri. # 91;color # 93; hasil: = PChar; # 91; b # 93; end; # 91;b # 93; Pada masalah ini saya selalu menemukan bahwa delphi secara tidak konsisten menetapkan panjang string ketika Pchar diketikkan ke string (ansistring) meskipun selalu menyalin SEMUA data dalam Pchar. (Seingat saya Delphi sedang melakukan casting Pchars sendiri ke string tetapi bukan dari sumber luar) Jadi untuk memastikan casting tipe pchar - string yang sempurna dalam delphi Anda harus: Var s: string; var p: pchar; s: = string (p); setlength (s, strlen (p)); Anoying sebagai bug dapat dengan mudah diperkenalkan jika Anda lupa, tetapi selama Anda ingat itu menyelesaikan pekerjaan. Itu juga ide yang buruk untuk menggunakan string lokal untuk digunakan sebagai penyimpanan kembali ke MT4 Untuk sebagian besar (normal) panjang string ini akan baik-baik saja tetapi jika Anda memiliki string besar (dalam pengalaman saya gt; 14Kb) maka itu umum untuk beberapa dari string yang hilang. Ini karena MT4 menyalin data dari variabel yang ruang lingkupnya baru saja dihapus. Yaitu string lokal sedang dihancurkan oleh bahasa DLL karena fungsi telah berakhir dan vars lokal perlu dibersihkan. Ini terjadi sementara Mt4 menyalin string. Jadi dalam kasus string besar tidak semua data akan disalin sebelum bahasa DLL menghancurkannya.

  7. #37

    Quote Originally Posted by ;
    [kode] Var s: string; var p: pchar; s: = string (p); setlength (s, strlen (p));
    Apakah mungkin untuk mengotomatisasi ini? Mungkin melalui turunan kompiler atau yang lainnya? Saya punya pertanyaan umum tentang Lazarus. Apakah saya benar dalam memahami bahwa sebagian besar kode Win32 kode khusus yang tersedia untuk umum untuk Delphi tidak mudah digunakan di Lazarus? Jika demikian, apa manfaat praktis yang dimiliki Lazarus daripada Delphi? Saya telah menggunakan Lazarus selama seminggu terakhir ini dan saya benar-benar menyukainya, tetapi saya bertanya-tanya apakah saya harus menggunakan delphi sebagai gantinya. Apakah interaksi dengan MT4 bekerja dengan cara yang persis sama di Delphi? Apakah ada perbedaan dalam PChar - gt; Konversi Ansistring atau apa pun yang harus saya ketahui sebelum saya mencoba delphi?

  8. #38

    Quote Originally Posted by ;
    Saya punya pertanyaan umum tentang Lazarus. Apakah saya benar dalam memahami bahwa sebagian besar kode Win32 kode khusus yang tersedia untuk umum untuk Delphi tidak mudah digunakan di Lazarus? Jika demikian, apa manfaat praktis yang dimiliki Lazarus daripada Delphi? Saya telah menggunakan Lazarus selama seminggu terakhir ini dan saya benar-benar menyukainya, tetapi saya bertanya-tanya apakah saya harus menggunakan delphi sebagai gantinya.
    Anda akan dapat menggunakan banyak kode spesifik win32 secara langsung di Lazarus dan mengompilasinya untuk windows tetapi Anda akan memerlukan beberapa penulisan ulang yang berat jika Anda ingin membuat kode seperti itu dikompilasi di Linux atau Mac. Rekomendasi untuk tidak menggunakan win32 API khusus hanya untuk tidak membatasi diri Anda pada platform windows. Jika Anda memulai proyek baru dari awal, Anda hanya harus menggunakan lintas platform API RTL, FCL dan LCL dan komponen lintas platfom tambahan yang menggantikan hampir semua yang bisa Anda lakukan dengan Windows API. Lazarus memiliki keuntungan yang dapat Anda kembangkan dengan cara seperti delphi (dan juga sampai batas tertentu menggunakan kembali kode Delphi yang ada) dan mengkompilasi kode identik yang sama pada banyak platform yang berbeda (sementara Delphi hanya tersedia untuk i386windows). Keuntungan kedua (dan bagi sebagian orang) adalah bahwa Lazarus adalah Open Source dan karenanya tidak ada entitas komersial yang dapat mengambilnya lagi dari komunitas (ingat bencana Kylix).
    Quote Originally Posted by ;
    Semuanya harus kurang lebih sama persis. Posting yang Anda kutip dengan casting string adalah salah satu pengecualian langka di mana beberapa detail kecil sedikit berbeda (dan bahkan tidak didokumentasikan, hal khusus ini tampaknya menjadi bug di Delphi). Jika Anda belum memiliki Delphi, maka tidak ada alasan untuk membelinya. Kecenderungan umum adalah bahwa orang-orang porting kode mereka dari Delphi ke Lazarus, bukan sebaliknya. Lazarus adalah pod melarikan diri yang akan diperlukan ketika seseorang di jembatan komando kapal ruang angkasa Delphi menekan tombol penghancuran diri (lagi). BTW: Ada versi baru Lazarus sedang berlangsung, setelah hampir dua tahun kerja keras, versi 0.9.30 akan segera dirilis. Sudah ditandai di SVN, kandidat rilis telah diuji, hanya dalam hitungan hari sekarang. _____ ยน) Sebenarnya lebih dari itu.

  9. #39
    . Saya sangat menghargai Anda membuat DLL dengan utas Lazarus; itu benar-benar mengubah cara saya memprogram hal ini. Saya punya pertanyaan jika Anda punya waktu sebentar - saya membuat program di Lazarus yang menggunakan paket TSimpleIPC untuk memungkinkan komunikasi antara dua Penguji MT4 yang terpisah. Saya menggunakan TSimpleIPCServer.OnMessage untuk memproses pesan di bagian server. Masalahnya adalah bahwa klien tidak tahu sebelumnya kapan server akan tersedia. Cara saya mengkodekannya sekarang adalah bahwa klien terus memeriksa apakah server tersedia - jika tidak maka Sleep (5) dan kemudian periksa lagi. terkirim: = Salah; ulangi jika client1.ServerRunning kemudian mulai client1.Connect; client1.SendStringMessage (outstr); terkirim: = Benar; client1.Disconnect; dan mulai tidur (5); akhir; sampai (terkirim = Benar); Pasti ada cara yang lebih baik untuk melakukan ini; tampaknya salah bahwa saya menggunakan Sleep (). Apakah mungkin untuk melampirkan event handler ke fungsi TSimpleIPCClient.ServerRunning?

  10. #40

    Quote Originally Posted by ;
    Saya belum menggunakan TSimpleIPCClient. AFAIK diimplementasikan dengan pipa bernama dan saya tidak tahu mekanisme untuk memicu acara ketika pipa itu ada, tapi saya tidak sepenuhnya yakin. Tapi Anda bisa membuat setiap aplikasi memulai server IPC sendiri dan membuat mereka saling terhubung satu sama lain. Mungkin ini dapat menyebabkan beberapa kode lebih bersihmudah. BTW Lazarus 0.9.30 akhirnya dirilis kemarin :-)

Izin Posting

  • Anda tidak boleh memposting thread baru
  • Anda tidak boleh memposting balasan
  • Anda tidak boleh memposting lampiran
  • Anda tidak boleh menyunting postingan Anda
  •  
  • Kode BB Aktif
  • Smilies Aktif
  • Kode [IMG] Aktif
  • Kode [VIDEO] Aktif
  • Kode HTML tidak aktif
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.