Appeler des fonctions à partir de la dll et renvoyer des résultats - page 5

 
Protégé c'est bien, sévèrement pauvre c'est mal. Et avec la possibilité d'appeler un dll, quelle est la sécurité ? :) Bien que vous puissiez bien sûr interdire le call dll, etc. et ainsi de suite. FindFirst et FindNext J'ai eu besoin, lorsque j'ai eu l'idée d'envoyer un ensemble de tâches à exécuter dans les fichiers de répertoire du conseiller expert afin qu'il puisse les examiner et les exécuter. Cela s'est avéré être absurde.
 
Et avec la possibilité d'invoquer la dll, quelle est la sécurité ? :)

Il suffit de regarder dans les paramètres - tout est désactivé (les DLL sont désactivées par défaut) :

 
J'en suis conscient lorsque j'ai branché mon dll. C'est juste que si vous êtes autorisé à importer la dll, de quel type de protection parlez-vous ?
 
Par _défaut_, toute importation depuis une DLL est _complètement_ interdite. C'est la protection.
Si l'on veut utiliser des DLL externes, il suffit d'activer le bouton "Confirmer chaque appel de fonction DLL" et de voir ce qui est appelé. C'est aussi une protection. Tout comme la protection de toutes les opérations sur les fichiers intégrés avec un accès uniquement aux répertoires /history et /files.
 
2 mike : désolé pour la question stupide. Je ne peux pas exécuter les dlls compilées dans Delphi. J'ai également rencontré un problème similaire avec Pol ("Passing arrays and strings in DLL (Delphi)"), mais personne n'y a répondu. Pouvez-vous dire comment cela a été possible pour vous ?
 
Quel est le problème ? Voici un exemple de dll qui fonctionne (j'ai laissé tomber tout ce qui n'est pas pertinent) :

la bibliothèque MetaDLL ;

utilise
SysUtils,
Cours,
fenêtres ;

{$R *.res}

{-----Initialize-------------------------------------------------------------}
procédure InitDllData(CurrencyName : PChar) ; stdcall ;
commencer
// faire quelque chose
fin ;

{-----Finalize---------------------------------------------------------------}
procédure FreeDllData ; stdcall ;
commencer
// faire quelque chose
fin ;

{-----Process tick-----------------------------------------------------------}
procédure ProcessTick(CurrencyName : PChar ; bid, ask : double ; time : integer) ; stdcall ;
var
f : fichier ;
DateTime : TDateTime ;
commencer
essayez
AssignFile(f, WorkDir + CurrencyName + '.tik') ;
essayez
reset(f, 1) ;
sauf
réécriture(f, 1) ;
fin ;

essayez
DateTime := MTTimeToNormal(time) ;
seek(f, FileSize(f)) ;
BlockWrite(f, DateTime, sizeof(DateTime)) ;
BlockWrite(f, bid, sizeof(bid)) ;
enfin
CloseFile(f) ;
fin ;
sauf
//
fin ;
fin ;


exportations
ProcessTick, InitDllData, FreeDllData ;

fin.

N'oubliez pas de définir toutes vos fonctions en tant que stdcall, d'utiliser uniquement les types standard de Windows (chaînes de caractères uniquement en tant que PChar), n'oubliez pas non plus de spécifier dans la directive export toutes vos fonctions exportées et vous serez satisfait.

Oui, et regardez aussi l'image postée par Renat sur la façon d'autoriser l'utilisation de la dll dans l'EA.
 
J'ai également oublié d'ajouter que la dll doit être située dans le dossier <metatrader>\experts\libraries\ et connectée dans le code du conseiller expert comme ceci :

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

et ensuite vous pouvez appeler n'importe quelle fonction
 
Merci pour votre aide. Il s'est avéré que c'était juste un tableau incorrectement appelé en tant que paramètre d'une fonction appelée depuis la dll.
 
Quel est le problème ? Voici un exemple de dll qui fonctionne (j'ai enlevé tous les trucs non pertinents):<br / translate="no">
la bibliothèque MetaDLL ;

utilise
SysUtils,
Cours,
fenêtres ;
...


Désolé pour une autre question stupide : est-il possible d'utiliser VCL dans cette DLL (pour être plus précis, est-ce possible pour vous) ? Car lorsque je connecte "form" à ddl, MetaTrader se bloque toujours avec "error" au démarrage (ou lorsque je connecte un Expert Advisor correspondant).
En fait, je ne m'intéresse qu'à TDatabase, TDataSource et TQuery.
 
2 micro
Je suis très intéressé par votre émulateur, que vous pouvez pratiquer sur l'histoire. Malheureusement, d'après ce que je sais, MT n'y arrivera pas. Si je comprends bien, vous ne voulez pas vraiment le vendre parce que vous gagnez bien votre vie sur le Forex. Mais cela fait longtemps que je cherche quelque chose de similaire sur le web, sans succès jusqu'à présent. Je serais heureux si vous me laissiez utiliser votre développement. Je peux vous proposer MTS, c'est peut-être la seule chose qui vous intéressera.
J'espère votre coopération, Alexander. f1-forum@mail.ru