Chiamare funzioni dalla dll e restituire risultati - pagina 5

 
Protetto è bene, gravemente povero è male. E con la possibilità di chiamare un dll, quanto è sicuro? :) Anche se naturalmente si può proibire il call dll, ecc. e così via. FindFirst e FindNext mi servivano quando ho avuto l'idea di inviare un mucchio di compiti da eseguire ai file di directory dell'Expert Advisor in modo che potesse guardarli ed eseguirli. Si è rivelata un'assurdità.
 
E con la possibilità di invocare la dll, quanto è sicuro? :)

Basta guardare nelle impostazioni - tutto è disabilitato (le DLL sono disabilitate di default):

 
Ne sono consapevole quando ho collegato il mio dll. È solo che se ti è permesso importare la dll, di che tipo di protezione stai parlando?
 
Per _default_ qualsiasi importazione da una DLL è _completamente_ vietata. Questa è la protezione.
Se uno vuole usare DLL esterne, basta attivare il pulsante "Confirm each DLL function call" e vedere cosa viene chiamato. Anche questa è una protezione. Proprio come proteggere tutte le operazioni sui file incorporati con accesso solo alle directory /history e /files.
 
2 mike: scusa per la domanda stupida. Non posso eseguire le DLL compilate in Delphi. Ho anche incontrato un problema simile con Pol ("Passing arrays and strings in DLL (Delphi)"), ma nessuno ha risposto lì. Puoi dire come è stato possibile per te?
 
Qual è il problema? Ecco un esempio di una dll che funziona (ho abbandonato tutto ciò che è irrilevante):

libreria MetaDLL;

usa
SysUtils,
Classi,
finestre;

{$R *.res}

{-----Initialize-------------------------------------------------------------}
procedura InitDllData(CurrencyName: PChar); stdcall;
iniziare
// fare qualcosa
fine;

{-----Finalize---------------------------------------------------------------}
procedura FreeDllData; stdcall;
iniziare
// fare qualcosa
fine;

{-----Process tick-----------------------------------------------------------}
procedura ProcessTick(CurrencyName: PChar; bid, ask: double; time: integer); stdcall;
var
f: file;
DateTime: TDateTime;
iniziare
prova
AssignFile(f, WorkDir + CurrencyName + '.tik');
prova
reset(f, 1);
tranne
riscrivere(f, 1);
fine;

prova
DateTime := MTTimeToNormal(time);
seek(f, FileSize(f));
BlockWrite(f, DateTime, sizeof(DateTime));
BlockWrite(f, bid, sizeof(bid));
finalmente
CloseFile(f);
fine;
tranne
//
fine;
fine;


esportazioni
ProcessTick, InitDllData, FreeDllData;

fine.

Non dimenticate di impostare tutte le vostre funzioni come stdcall, usate solo tipi standard di Windows (stringhe solo come PChar), inoltre non dimenticate di specificare nella direttiva export tutte le vostre funzioni esportate e sarete felici.

Sì, e guarda anche l'immagine postata da Renat su come permettere l'uso di dll in EA.
 
Ho anche dimenticato di aggiungere che la dll dovrebbe essere collocata nella cartella <metatrader>experts\libraries\ e collegata nel codice di Expert Advisor in questo modo:

#importare "MetaDLL.dll"
void ProcessTick(string CurrencyName, double aBid, double aAsk, int aTime);
void InitDllData(string CurrencyName);
void FreeDllData();

e poi si può chiamare qualsiasi funzione
 
Grazie per l'aiuto. Si è scoperto che era solo un array chiamato erroneamente come parametro di una funzione chiamata dalla dll
 
Qual è il problema? Ecco un esempio di una dll che funziona (ho tolto tutta la roba irrilevante):<br / translate="no">
libreria MetaDLL;

usa
SysUtils,
Classi,
finestre;
...


Scusa per un'altra domanda stupida: è possibile usare VCL in questa DLL (per essere più precisi, è stato possibile per te)? Perché quando collego il "modulo" al ddl, MetaTrader si blocca ancora con "errore" all'avvio (o quando collego un Expert Advisor corrispondente).
In realtà sono interessato solo a TDatabase, TDataSource, TQuery
 
2 mike
Sono molto interessato al tuo emulatore, che si può praticare sulla storia. Purtroppo, per quanto ne so, MT non ce la farà. Da quanto ho capito non vuoi davvero venderlo perché guadagni bene sul Forex. Ma ho cercato a lungo qualcosa di simile sul web, finora senza successo. Sarei felice se mi permettessi di usare il tuo sviluppo. Posso offrirti MTS, potrebbe essere l'unica cosa che ti interessa.
Spero nella tua collaborazione, Alexander. f1-forum@mail.ru