Cara Terbaik: __cdecl ke stdcall
Results 1 to 4 of 4

Thread: Cara Terbaik: __cdecl ke stdcall

  1. #1
    terima kasih.


    sesiapa tahu bagaimana ini akan dilakukan dengan betul menggunakan extern


    Kod PHP: <code><span style=”color: #000000”> <span style=”color: #0000BB”>void_SomeFunction</span><span style=”color: #007700”>(</span>< span style=”color: #0000BB”>intsomeint</span><span style=”color: #007700”>)
    </span><span style=”color: #0000BB”>int_SomeFunction2</span ><span style=”color: #007700”>(</span><span style=”color: #0000BB”>inta</span><span style=”color: #007700”>,</span>< span style=”color: #0000BB”>intb</span><span style=”color: #007700”>)
    </span><span style=”color: #0000BB”></span> </span> </code> Saya melakukannya secara manual seperti:
    Kod PHP: <code><span style=”color: #000000”> <span style=”color: #0000BB”>MT4_EXPFUNCvoid__stdcallSomeFunction</span><span style=”color: #007700”>(</span>< span style=”color: #0000BB”>intsomeint</span><span style=”color: #007700”>)
    {
    </span><span style=”color: #0000BB” >_SomeFunction</span><span style=”color: #007700”>(</span><span style=”color: #0000BB”>someint</span><span style=”color: #007700”>) ;
    kembali;
    }
    </span><span style=”color: #0000BB”></span> </span> </code>

  2. #2
    Anda membuat dll pembalut (seperti yang anda lakukan) yang membungkus setiap fungsi ke dalam fungsi stdcall atau anda menggunakan mt5/mql5 yang boleh (daripada apa yang telah dibaca 2 tahun lalu¹) secara langsung mengimport fungsi cdecl. Tidak ada cara untuk menggunakannya secara langsung dari mql4. ______ ¹ Saya telah membaca ini di suatu tempat semasa mql5 masih dalam fasa perancangan, mereka mungkin telah mengubah ini, saya tidak pernah menggunakan mql5.

  3. #3
    I have encountered a number of issues which I'm not sure how they are correctly handled. Maybe someone knows thanks for any hints. 1. _cdecl implementation: Not sure how to handle the 3 ... as I guess this are for any additional arguments Object* Format(Object *exception, const char *format, ...) PHP Code: <code><span style=”color: #000000”> <span style=”color: #0000BB”>
    MT4_EXPFUNCObject</span><span style=”color: #007700”>*</span><span style=”color: #0000BB”>__stdcallFormat</span><span style=”color: #007700”>(</span><span style=”color: #0000BB”>Object</span><span style=”color: #007700”>*</span><span style=”color: #0000BB”>exception</span><span style=”color: #007700”>,const</span><span style=”color: #0000BB”>char</span><span style=”color: #007700”>*</span><span style=”color: #0000BB”>format</span><span style=”color: #007700”>,...){
    </span><span style=”color: #0000BB”>Object</span><span style=”color: #007700”>*</span><span style=”color: #0000BB”>e</span><span style=”color: #007700”>=</span><span style=”color: #0000BB”>Format</span><span style=”color: #007700”>(</span><span style=”color: #0000BB”>exception</span><span style=”color: #007700”>,</span><span style=”color: #0000BB”>format</span><span style=”color: #007700”>,...);

    return(</span><span style=”color: #0000BB”>e</span><span style=”color: #007700”>);
    }
    </span><span style=”color: #0000BB”></span> </span> </code> 2. _cdecl implementation: Not sure how to handle this at all int Call(int (*func)(void *), void *arg) PHP Code: <code><span style=”color: #000000”> <span style=”color: #0000BB”>MT4_EXPFUNCint__stdcallCall</span><span style=”color: #007700”>(</span><span style=”color: #0000BB”>int</span><span style=”color: #007700”>(*</span><span style=”color: #0000BB”>func</span><span style=”color: #007700”>)(</span><span style=”color: #0000BB”>void</span><span style=”color: #007700”>*),</span><span style=”color: #0000BB”>void</span><span style=”color: #007700”>*</span><span style=”color: #0000BB”>arg</span><span style=”color: #007700”>){
    </span><span style=”color: #0000BB”>inti</span><span style=”color: #007700”>=</span><span style=”color: #0000BB”>Call</span><span style=”color: #007700”>(</span><span style=”color: #0000BB”>int</span><span style=”color: #007700”>(*</span><span style=”color: #0000BB”>func</span><span style=”color: #007700”>)(</span><span style=”color: #0000BB”>void</span><span style=”color: #007700”>*),</span><span style=”color: #0000BB”>arg</span><span style=”color: #007700”>);

    return(</span><span style=”color: #0000BB”>i</span><span style=”color: #007700”>);
    }
    </span><span style=”color: #0000BB”></span> </span> </code> 3. UNSURE with the return void* (it compiles but is it ok to do it like this? _cdecl implementation: void* MemMalloc(size_t n) PHP Code: <code><span style=”color: #000000”> <span style=”color: #0000BB”>MT4_EXPFUNCvoid</span><span style=”color: #007700”>*</span><span style=”color: #0000BB”>__stdcallMemMalloc</span><span style=”color: #007700”>(</span><span style=”color: #0000BB”>size_tn</span><span style=”color: #007700”>){
    </span><span style=”color: #0000BB”>void</span><span style=”color: #007700”>*</span><span style=”color: #0000BB”>is</span><span style=”color: #007700”>=</span><span style=”color: #0000BB”>Mem_Malloc</span><span style=”color: #007700”>(</span><span style=”color: #0000BB”>n</span><span style=”color: #007700”>);

    return(</span><span style=”color: #0000BB”>is</span><span style=”color: #007700”>);
    }
    </span><span style=”color: #0000BB”></span> </span> </code> I don't really need them but I came across them and would be interested how one does it correctly. Thanks

  4. #4

    Quote Originally Posted by ;
    Saya tidak begitu memerlukannya tetapi saya terjumpa mereka dan akan berminat bagaimana seseorang melakukannya dengan betul.
    Nampaknya anda cuba membungkus sesuatu yang lebih dipatuhi. Mungkin tidak semua yang dieksport dll ini boleh digunakan daripada mql4 atau akan masuk akal (sekurang-kurangnya tidak dengan cara yang sama persis bagaimana ia akan digunakan daripada C ). Fungsi yang mengembalikan penunjuk kepada struktur atau objek atau penunjuk yang dipatuhi kepada fungsi lain dan semua perkara itu tidak akan banyak digunakan dalam kod mql4 anda. Jika anda memerlukannya, masukkan semua kod yang menggunakannya ke dalam dll pembungkus anda (sehingga menjadikannya lebih sedikit daripada sekadar pembungkus nipis) dan eksport hanya beberapa fungsi mudah untuk digunakan yang boleh digunakan dengan mudah daripada mql4. Alihkan seberapa banyak kod mql4 yang mungkin/munasabah ke dalam dll anda dan reka API mudah untuk keseluruhannya supaya anda tidak perlu melompat melalui gelung di sebelah mql4 untuk menggunakan dll anda. Anda telah menemui keseimbangan yang betul jika API antara mql4 dan dll adalah semudah (elegan) dan semudah mungkin.

Kebenaran Posting

  • Anda tidak boleh menghantar thread baru
  • Anda tidak boleh membalas kiriman
  • Anda tidak boleh mengedit siaran anda
  • Anda tidak boleh menyiarkan lampiran
  •  
  • Kod BB Hidup
  • Smilies Hidup
  • Kod [IMG] adalah Hidup
  • Kod [VIDEO] adalah Hidup
  • Kod HTML Tidak Hidup
Polisi Kuki
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.