Discussione su "Come scrivere una DLL per MQL5 e scambiare dati in 10 minuti". - pagina 4

 
Cos'è questo messaggio che sto ottenendo "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Violazione di accesso scrivere a 0x00000000 in 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll'?
MT5 build 240. La chiamata della DLL è consentita.
 
joo:
Cos'è questo messaggio che sto ottenendo "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Violazione di accesso scrivere a 0x00000000 in 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll'?
MT5 build 240. La chiamata dll è abilitata.

Esempio dimostrativo dall'articolo:

4. Cattura delle eccezioni nelle funzioni DLL

Per evitare il crash del terminale stesso, ogni chiamata di funzione DLL è automaticamente protetta da un wrapper Unhandled Exception. Questo meccanismo evita la maggior parte degli errori standard (invocazione di memoria inaccessibile, divisione per zero, ecc.)

Per verificare l'operatività di questo meccanismo, creiamo il seguente codice:

_DLLAPI void __stdcall fnCrashTest(int *arr)
  {
//--- ожидаем получение нулевой ссылки, чтобы вызвать исключение
   *arr=0;
  }

e chiamarlo dal terminale:

#import "MQL5DLLSamples.dll"
void fnCrashTest(int arr);
#import

//--- вызовем креш (среда исполнения перехватит исключение и не даст упасть терминалу)
   fnCrashTest(NULL);
   Print("Этого текста не увидите!");
//---

Di conseguenza, ci sarà un tentativo di scrivere nell'indirizzo zero e verrà generata un'eccezione. Il terminale lo intercetta, lo segnala nel log e continua il suo lavoro:

MQL5DLL Test (GBPUSD,M1) 20:31:12 Access violation write to 0x00000000


 
Renat:
Dall'articolo un esempio dimostrativo:

Grazie. Quindi non ero molto attento quando ho letto l'articolo. :)

PS Avrei potuto dire qualcosa come: "Ascolta, compagno! Andate a rileggere l'articolo", e avreste ragione. Rispetto e rispetto, come si dice.

 
Renat:

Cara Pisara,

Cerchiamo di essere chiari: stiamo avendo una discussione tra un teorico e un praticante.
Senza andare sul personale, al punto. Un buon teorico si affida all'esperienza pratica, un buon praticante misura sette volte.

Certo, nessuno vi proibisce di lottare per la "pace nel mondo", ma prendete in considerazione più fattori del "perché non migliorare?

Questo è quello che ho scritto - non lo userete, perché non volete fare un lavoro di routine. Dovrete avere tutto su un piatto d'argento - tutti gli indicatori, tutto l'ambiente di mercato, tutta la storia in diversi periodi, ecc. E devi fare dei grafici, perché non potrai manipolare tutti gli indicatori nella tua mente.

Quindi, avete effettivamente bisogno di un terminale completo. E noi ve lo diamo: MetaTrader 5 + MQL5 + DLL. Chiamatelo framework o dite semplicemente - dateci il terminale in codice sorgente/componenti (perché è questo che chiedete).

Non è una pacificazione qui, ma dovete essere d'accordo, rendere la vita più facile per il programmatore e migliorare la qualità del sistema di trading + le sue capacità di integrazione non ha ancora fatto male a nessuno. Esempi non lontani: Borland Delphi, MS .net hanno un framework completamente aperto / base di componenti / diagrammi di classe e persino una parte significativa del codice sorgente (Delphi) per gli utenti della piattaforma.

I programmatori considerano erroneamente "potente" essere in grado di scrivere script per sistemi di trading in linguaggi nativi non protetti, e poi sono sorpresi che nessuno usi le loro creazioni. Ecco perché muoiono prima di nascere. Quelli che hanno sviluppato e creato comunità di utenti, pensano più a fondo (perché hanno ricevuto i colpi prima) e non fanno questi errori.
Siamo realistici. Se volete rilasciare un software e venderlo, tra sei mesi o un anno rilasciare un aggiornamento a pagamento, allora la protezione del codice è molto importante per voi. Se voi, come ho capito, siete qui per il lungo termine e migliorate continuamente la piattaforma con una catena di build e supporto, allora nessun concorrente vi avrà. Ma gli utenti saranno in grado di scrivere un codice molto migliore. E non solo il codice, ma anche la struttura TC, che non è meno importante! Posso anche portare un'analogia con gli antivirus - hackerare il client AV non dà ancora accesso all'aggiornamento del database dei virus (qui - quote).

La chiamata di DLL controllata (disattivata di default) è accettabile, ma scaricare DLL fatte da qualcuno sul vostro terminale di trading è un buco peggiore di un Internet Explorer 6 senza patch.
Quindi questo buco è solo un permesso dell'utente! Come può un povero utente garantire al 100% l'assenza di DLL dannose, anche se è firmata dalla società X? Dopo tutto, se la bandisse nel dubbio, non saprebbe mai se gli sarebbe utile o meno. Quindi qui abbiamo un po' di psicologia.


Per vostra informazione Google Trends statistiche sui terminali di trading con automazione:

Mi chiedo se la scala delle ordinate sia logaritmica?
A proposito, i dati russi sono interessanti e possiamo vedere che Metastock rosso è in testa:

Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
  • www.google.ru
Изучайте популярные поисковые запросы при помощи службы "Google Тренды".
 

Usa le normali funzioni di "Rispondi", per favore. È molto scomodo da leggere.

Per spezzare un blocco citato, metti il cursore dove vuoi e seleziona lo stile "Plain text" o premi Ctrl+1.


In generale, vi consiglio di smettere con questo tipo di consigli - sono fondamentalmente mortali, basati su presupposti sbagliati e non adatti al linguaggio applicato.

Come battuta, c'è una vecchia barzelletta:

Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.

Un passante si avvicina a un ebreo, getta un rublo e dice:

- Ascolta, cambia il cartello, altrimenti resterai affamato.

Quando il passante se ne andò, l'ebreo si rivolse al suo vicino e disse:

- Hai capito, Izya? Quest'uomo ci insegnerà il commercio!

 
Renat:

Usa le normali funzioni di "Rispondi", per favore. È molto scomodo da leggere.

Per rompere un blocco citato, metti il cursore nel posto giusto e seleziona lo stile "Plain text" o premi Ctrl+1.


In generale, vi consiglio di smettere con questo tipo di consigli - sono fondamentalmente assassini, basati su presupposti sbagliati e non adatti a un linguaggio applicato.

Come battuta, c'è una vecchia barzelletta:


OK, se non vuoi dare le vere ragioni per cui la premessa è micidiale e perché il framework .net è angusto per te, la discussione è finita. Per quanto riguarda la battuta, misurate voi stessi, il monastero è vostro.

Resta da augurare a tutti buona fortuna per non guardare indietro dopo l'aggiornamento al 5.

 
Renat, grazie mille per l'articolo! È molto interessante e informativo. Purtroppo non sono riuscito a usare lo script MQL5DLL Test.mq5. Ho fatto tutto come descritto nell'articolo. Tuttavia, quando ho eseguito lo script, MT5 è caduto. Non so quale sia il problema. Che sia la questione dell'asse? Sto eseguendo MS Vista x64. Si prega di consigliare come risolvere il problema :-)
 
denkir:
Renat, grazie mille per l'articolo! È molto interessante e informativo. Purtroppo non sono riuscito a usare lo script MQL5DLL Test.mq5. Ho fatto tutto come descritto nell'articolo. Tuttavia, quando ho eseguito lo script, MT5 è caduto. Non so quale sia il problema. Che sia la questione dell'asse? Sto eseguendo MS Vista x64. Si prega di consigliare come risolvere il problema :-)

Rileggete l'intero articolo, per favore.

C'è solo un posto sulla generazione di errori (scrittura in indirizzi zero) all'interno della DLL, e ulteriore cattura degli errori da parte del terminale senza crash. È necessario commentare la chiamata del metodo fnCrashTest.

Oggi controllerò questo codice su Vista x64 - forse è un nostro errore.

 
Renat писал(а) :

Rileggete l'intero articolo, per favore.

C'è solo un posto sulla generazione dell'errore (scrivere in indirizzi zero) all'interno della DLL e catturare ulteriormente questo errore da terminale senza crash. Dovreste commentare la chiamata del metodo fnCrashTest.

Oggi controllerò questo codice su Vista x64 - forse è un nostro errore.

Sì, ho letto tutto attentamente e più di una volta :-))

Ho dimenticato di dirvi che ho commentato la funzione fnCrashTest(int arr) nello script MQL5DLL Test.mq5. Ricevo ancora un crash. :-(

Questo è quello che sembra. O devo commentare la funzione fnCrashTest(int arr) nel codice della dll?

=========================
#import "MQL5DLLSamples.dll"
int  fnCalculateSpeed(int &res1,double &res2);
void fnFillArray(int &arr[],int arr_size);
void fnReplaceString(string text,string from,string to);
//void fnCrashTest(int arr);
#import
=========================

//fnCrashTest(NULL);
//Print("Этого текста не увидите!");

 

1) quale versione del terminale è 32 o 64 bit?

2) quale versione di dll è 32 o 64 bit?

Motivazione: