Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Dovreste aggiungere almeno un paragrafo sul debug. L'articolo cita una situazione in cui può verificarsi l'AV, ma anche tralasciando il mare di altre potenziali fonti di errore, cercare manualmente (a occhio o mentalmente) la posizione dell'errore può richiedere molto tempo e senza successo.
Grazie per il commento. Penso che questa sezione possa essere ampliata per includere gli errori più comuni. Tuttavia, per evitare di cercare gli errori "a lungo e senza successo", fate tutto come è scritto nell'articolo. Gli esempi in esso contenuti sono fattibili. Inoltre, utilizzate il debugger di MetaEditor, che è abbastanza decente, con debug passo-passo e punti di interruzione!
In questo articolo non voglio insegnare a nessuno a programmare. Se qualcuno commette errori elementari e poi grida a gran voce, , forse non dovrebbe ancora creare le proprie DLL e iniziare a imparare la parte matematica.
Ciao HideYourRichess.
Sei così veloce! Hai scritto così tanto! Dovresti scrivere i tuoi articoli su Delphi.
Cercherò di rispondere brevemente e con ordine:
1. Юниты SysUtils и Classes нужно было оставить в проекте.
Le SysUtils sono nel progetto! Le classi non hanno nulla da fare! Il gestore di eccezioni oltre a SysUtils è implementato in System, che è collegato di default, quindi non vedo motivo di preoccuparsi.
2. Non si devono usare tutti i tipi di procedure all'interno di DllEntryPoint (alias DllMain).
L'esempio di DllEntryPoint è presente su Internet in ogni angolo. Si tratta di un metodo standard per creare eventi DLL, ai quali, ad esempio, è possibile legare l'allocazione e il rilascio di memoria dall'heap. Se avete errori reali con questo metodo di lavoro con la memoria, sono pronto a prenderlo in considerazione.
Non discuto di tutto il resto che non si può fare in DllEntryPoint, perché non lo uso spesso.
3. Avete scritto molto sul gestore della memoria. Mi limiterò a sottolineare le sue conclusioni:
Quindi si può fare in modo che la DLL e l'applicazione abbiano un unico gestore di memoria, e sarà il gestore di memoria di MT4.
Il problema è che nessuno di noi sa come funziona il gestore della memoria di MT5(MT4). E anche se conoscessimo i nomi delle funzioni che implementano questo gestore, come fareste a usarlo, perché l'API per MT5è chiusa! Quindi l'idea di un unico gestore e di una DLL per MT5 è un'utopia.
Per non confondere i lettori, suggerisco invece di utilizzare la classica tecnica di gestione della memoria implementata nelle funzioni API. È descritta nell'articolo nella sezione dedicata al lavoro con le stringhe.
Conto sul fatto che, invece di citare libri e articoli di Delphi in questa sede, l'autore dell'articolo si limiterà a fornire indicazioni su ciò che effettivamente non funziona rispetto a quanto descritto nell'articolo. Preferibilmente con esempi.
Grazie per il tuo commento. Penso che questa sezione possa essere ampliata per includere gli errori più comuni. Tuttavia, per evitare di cercare gli errori "a lungo e senza successo", fate tutto come è scritto nell'articolo. Gli esempi in esso contenuti sono fattibili. Inoltre, utilizzate il debugger di MetaEditor, che è abbastanza decente, con debug passo-passo e punti di interruzione!
In questo articolo non voglio insegnare a nessuno a programmare. Se qualcuno commette errori elementari e poi grida ad alta voce, , forse non dovrebbe ancora creare le proprie DLL e iniziare a imparare la parte matematica.
Ahimè, vi sbagliate di grosso. Non solo chi sta imparando a programmare commette errori - sia elementari che non - ma anche programmatori esperti.
Questo non ha nulla a che fare con la matematica, ma con gli strumenti di debug. Ricordiamo la nota statistica "80 per 20": l'80% del tempo viene speso per il debug e solo il 20% per la scrittura del codice. Per quanto ho capito, l'obiettivo dell'articolo è insegnare a scrivere una DLL funzionante, cioè non solo l'esempio specifico fornito, ma anche un ipotetico altro codice. Naturalmente, è impossibile considerare tutti i potenziali errori, ma abbiamo bisogno di informazioni su come catturarli in linea di principio. Altrimenti, i lettori non potranno fare altro che riprodurre l'esempio.
Anche MetaEditor non ha nulla a che fare con questo, perché stiamo parlando del debug della DLL, cioè dei suoi componenti interni.
Tu sei l'autore e lo sai bene. Ho solo espresso la mia opinione su alcune incompletezze nella presentazione.
Questi sono estratti da un vecchio articolo sulle dll per mt4, non ancora terminato. Ho semplicemente copiato gli estratti qui. Non è difficile e non è lungo.
"Le SysUtils sono nel progetto! Le classi non hanno nulla a che fare con questo! Il gestore di eccezioni oltre a SysUtils è implementato in System che è collegato di default, quindi non vedo alcun motivo di preoccuparsi. "
Spetta al proprietario decidere quali unità includere. Ma credo sia necessario specificare il motivo. In questo caso, SysUtils e Classes sono raccomandati da borland. E ci sono delle ragioni per questo.
"L'esempio con DllEntryPoint è riportato su Internet in ogni angolo. Si tratta di un modo standard di creare eventi DLL, a cui, ad esempio,".
Borland non ha nascosto DllMain dalle mani dei malintenzionati per caso. Il modo standard di creare una DLL in Delphi è con un DllMain nascosto. Pensate al perché di questa scelta. E leggete cosa raccomanda la stessa Microsoft.
"È possibile vincolare l'allocazione e il rilascio della memoria dall'heap. Se ci sono errori reali con questo metodo di lavoro con la memoria, sono pronto a prenderlo in considerazione".
Sta a voi decidere. Ma la mia raccomandazione è che non si faccia assolutamente nulla in DllMain.
"Il problema è che nessuno di noi sa come funziona il gestore della memoria in MT5(MT4). E anche se conoscessimo i nomi delle funzioni che implementano questo gestore, come fareste a usarlo, perché l'API per MT5è chiusa! Quindi l'idea di un unico gestore e di una DLL per MT5 è un'utopia".
;-) per qualcuno è "chiuso" e "utopia" - e per qualcun altro "funziona tutto". stiamo parlando della 4. Non ho guardato la 5.
Va detto che esiste un'alternativa all'uso di Delphi.
Se non siete già utenti di Delphi, dovreste considerare l'uso di Lazarus/FPC: è open source, ha quasi le stesse caratteristiche di Delphi (e anche qualcuna in più), è ampiamente compatibile con il codice sorgente di Delphi e scommetto che tutti gli esempi di cui sopra si compilano in Lazarus senza alcuna modifica.
Se preferite l'open source al software proprietario (cosa che dovreste fare in ogni caso) allora Lazarus è quello che state cercando e non una versione commerciale di prova di Delphi.
Nell'articolo è presente una procedura di questo tipo:
Il compilatore mi chiede cosa sia la variabile non dichiarata BUFFER_SIZE.
Potreste dirmi cosa dovrebbe essere, dove dovrebbe essere dichiarata e di quale buffer si tratta?
Il compilatore mi chiede cosa sia la variabile non dichiarata BUFFER_SIZE.
Potreste dirmi cosa dovrebbe esserci e dove dovrebbe essere dichiarata e di quale buffer stiamo parlando?
Nel file di progetto dll_mql5.dpr c'è la seguente dichiarazione
const BUFFER_SIZE = 255;
Con una riga di codice
Buffer:=AllocMem(BUFFER_SIZE);
la memoria per la memorizzazione della stringa viene allocata nell'heap.
Il puntatore al buffer stesso viene utilizzato nella funzione GetStringBuffer, che dimostra come lavorare con le stringhe.
Aiuto DLL
Qualcuno può aiutarmi a guidarmi... Possiamo usare il file DLL di MT4 su MT5 e se sì... dove lo installi in MT5 e qualsiasi altra cosa che ho bisogno di sapere.
Inoltre, in quale cartella dobbiamo memorizzare il file DLL?
Non ho più il codice della DLL, quindi non posso più riscriverlo.
Qualsiasi suggerimento e aiuto sarà apprezzato.
Quando collego l'Expert Advisor in MT5 ottengo l'errore "dll non è la versione a 64 bit".
Esiste un modo per utilizzare una dll a 32 bit?
In caso contrario, qualcuno può dirmi come compilare una dll a 64 bit in Delphi XE?
come compilare una dll a 64 bit in Delphi XE?