Llamar a funciones desde la dll y devolver resultados - página 5

 
Protegido es bueno, severamente pobre es malo. Y con la posibilidad de llamar a un dll, ¿qué seguridad tiene? :) Aunque, por supuesto, se puede prohibir la llamada dll, etc., etc. FindFirst y FindNext los necesité cuando tuve la idea de enviar un montón de tareas para su ejecución a los archivos del directorio del Asesor Experto para que pudiera mirar a través de ellos y ejecutar. Resultó ser absurdo.
 
Y con la posibilidad de invocar la dll, ¿qué seguridad tiene? :)

Sólo tienes que mirar en la configuración: todo está desactivado (las DLL están desactivadas por defecto):

 
Soy consciente de ello cuando conecté mi dll. Es que si se permite importar la dll, ¿de qué tipo de protección se habla?
 
Por _defecto_ cualquier importación desde una DLL está _completamente_ prohibida_. Esta es la protección.
Si se quiere utilizar DLLs externas, basta con activar el botón "Reconocer cada llamada a función DLL" y ver qué se llama. Esto también es protección. Al igual que la protección de todas las operaciones de archivos incrustados con acceso sólo a los directorios /historia y /archivos.
 
2 mike: perdón por la pregunta estúpida. No puedo ejecutar dlls compilados en Delphi. También me encontré con un problema similar en Pol ("Passing arrays and strings in DLL (Delphi)"), pero nadie me respondió allí. ¿Puede decir cómo fue posible para usted?
 
¿Cuál es el problema? Aquí hay un ejemplo de una dll que funciona (he dejado todo lo irrelevante):

biblioteca MetaDLL;

utiliza
SysUtils,
Clases,
ventanas;

{$R *.res}

{-----Initialize-------------------------------------------------------------}
procedure InitDllData(CurrencyName: PChar); stdcall;
empezar
// hacer algo
fin;

{-----Finalize---------------------------------------------------------------}
procedimiento FreeDllData; stdcall;
empezar
// hacer algo
fin;

{-----Process tick-----------------------------------------------------------}
procedure ProcessTick(CurrencyName: PChar; bid, ask: double; time: integer); stdcall;
var
f: archivo;
DateTime: TDateTime;
empezar
pruebe con
AssignFile(f, WorkDir + CurrencyName + '.tik');
pruebe con
reset(f, 1);
excepto
rewrite(f, 1);
fin;

pruebe con
DateTime := MTTimeToNormal(time);
seek(f, FileSize(f));
BlockWrite(f, DateTime, sizeof(DateTime));
BlockWrite(f, bid, sizeof(bid));
finalmente
CloseFile(f);
fin;
excepto
//
fin;
fin;


exportaciones
ProcessTick, InitDllData, FreeDllData;

fin.

No olvide establecer todas sus funciones como stdcall, utilice sólo los tipos estándar de Windows (cadenas sólo como PChar), tampoco olvide especificar en la directiva de exportación todas sus funciones exportadas y será feliz.

Sí, y también mira la imagen publicada por Renat sobre cómo permitir el uso de dll en EA.
 
También se me olvidó añadir que la dll debe estar ubicada en la carpeta <metatrader>\perts\libraries\ y conectada en el código del Asesor Experto así:

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

y luego puedes llamar a cualquier función
 
Gracias por la ayuda. Resulta que sólo era un array mal llamado como parámetro de una función llamada desde la dll
 
¿Cuál es el problema? Aquí hay un ejemplo de una dll que funciona (quité todo lo irrelevante):<br / translate="no">
biblioteca MetaDLL;

utiliza
SysUtils,
Clases,
ventanas;
...


Perdón por otra pregunta tonta: ¿Es posible usar VCL en esta DLL (para ser más precisos, te fue posible)? Porque cuando conecto el "formulario" a ddl, MetaTrader sigue fallando con "error" al inicio (o al conectar un Asesor Experto correspondiente).
En realidad sólo estoy interesado en TDatabase, TDataSource, TQuery
 
2 micrófonos
Estoy muy interesado en su emulador, que puede practicar en la historia. Desgraciadamente, por lo que sé, MT no lo va a conseguir. Según tengo entendido no quieres venderlo realmente porque ganas buen dinero en Forex. Pero llevo mucho tiempo buscando algo similar en la web, hasta ahora sin éxito. Me encantaría que me dejaras utilizar tu desarrollo. Por mi parte puedo ofrecerte MTS, quizás sea lo único que te pueda interesar.
Espero tu cooperación, Alexander. f1-forum@mail.ru