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
Le funzioni sono chiamate secondo certe regole - convenzione di chiamata. MT4 è garantito per lavorare con funzioni che aderiscono a __stdcall (un caso speciale di una variante di regola). Per essere sicuri che la funzione esportata utilizzi le regole di cui sopra, dovrebbe avere questo aspetto: void __stdcall AnyFn();
2. Conosco due modi per fare l'esportazione di funzioni di libreria - con __declspec(dllexport) e con il file def (è più facile, altrimenti bisogna lottare con la decodifica delle funzioni in aggiunta). In VS per includere il file def nel progetto, prima aggiungilo ai file del progetto, poi aggiungi il nome del file a: proprietà del progetto/compositore/input/modulo file di definizione.
P.S: Il progetto di esempio con il file def si trova in: directory terminal\ experts\samples\DLLSample.
PASSARE PARAMETRI A UNA FUNZIONE DLL
1. Quando si passa una variabile stringa, un array di char (carattere ANSI, prende 1 byte) viene passato alla DLL.
2. Passando int o double alla libreria, la variabile sarà copiata, quindi quando si cambia la variabile nella dll, non c'è nessun cambiamento nella dll:
3. Per poter cambiare le variabili int e double dichiarate in MQL, bisogna passare degli array:
4. Quando si passa un array da stringa, struct MqlStr viene passata alla DLL:
P.S.
Ogni volta che un array o una stringa (stringa) viene passata alla DLL, è in realtà un puntatore a una sezione di memoria (puntatore) che viene passata alla libreria come segue
void __stdcall fn(int *pointer) {} // come questo. In questo modo si può lavorare come un array, per esempio, puntatore[4] = 4.
void __stdcall fn(int &reference) {} // o così. Ma avremo accesso a un solo elemento. È rilevante quando si passa un array di un elemento nella libreria.
Non sono riuscito a trovare una spiegazione adeguata per l'* davanti al puntatore, a cosa serve? Non è possibile farne a meno ?????
E una domanda sul modo in cui ottenere testo da una DLL?
Non sono riuscito a trovare una spiegazione adeguata per l'* davanti al puntatore, a cosa serve? Non è possibile farne a meno ?????
E una domanda sul modo in cui ottenere testo da una DLL?
1. Trasferimento di una stringa all'IDC:
2. Il segno * indica che si tratta di un puntatore. In breve, ogni variabile non ha solo un valore, ma anche un indirizzo dove si trova nella memoria. I puntatori possono lavorare con questo indirizzo. Questo è un problema che deve essere ben compreso, penso che dovresti controllare i libri sul C++;1. Trasferimento di una stringa all'IDC:
2. Il segno * indica che si tratta di un puntatore. In breve, ogni variabile non ha solo un valore, ma anche un indirizzo dove si trova nella memoria. I puntatori possono lavorare con questo indirizzo. È un problema che deve essere ben compreso, quindi potresti voler controllare alcuni libri sul C++;Dovete solo fare attenzione ai dati globali nella libreria. I programmi MCL girano indipendentemente l'uno dall'altro (ma condividono variabili globali perché sono nello stesso thread), quindi è possibile che diversi script scrivano e leggano nella stessa posizione di memoria (il che non è buono). Questo richiede una sincronizzazione, per esempio usando sezioni critiche. Sottolineo che questo è vero per i dati globali (dichiarati fuori dalle funzioni). Quando le funzioni vengono chiamate, viene creato il loro proprio, indipendente insieme di variabili.