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à.
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?
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:
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
Basta guardare nelle impostazioni - tutto è disabilitato (le DLL sono disabilitate di default):
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.
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.
#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
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
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