Dans MQL5, il y a toujours de la place pour un exploit ! ;) - page 5

 
sergeev:

Je ne pense pas. On ne peut pas faire passer des mégaoctets d'informations par OBJ_TEXT.

le candidat le plus proche est celui des ressources

Remarque : un point est en fait une structure remplie de variables de différents types. Il est enregistré lorsque vous fermez/ouvrez le terminal et également enregistré dans un modèle.

 
DC2008:

Remarque : un point est en fait une structure remplie de variables de différents types. Il est enregistré lorsque vous fermez/ouvrez le terminal et il est également enregistré dans le modèle.

?
 
sergeev:

Je continue à demander, avez-vous trouvé une solution pour DLL 32/64 ?

Il y a une sorte de WOW32reg.exe dans le système (\System32\). J'ai fait le tour, il ne répond pas à -h - ?, je n'ai pas pu enregistrer quoi que ce soit à l'aveugle.

Google est également silencieux, je n'ai rien pu trouver sur microsoft.com... donc c'est plutôt cool.

 
sergeev:
?

Qu'est-ce qui n'est pas clair ? Donnez-moi une tâche concrète, mais c'est un chemin détourné... ?

 
MetaDriver:

Je continue à demander, avez-vous trouvé une solution pour DLL 32/64 ?

Il y a une sorte de WOW32reg.exe dans le système (\System32\). J'ai fait le tour, il ne répond pas à -h - ?, je n'ai pas pu enregistrer quoi que ce soit à l'aveugle.

Google est également silencieux, je n'ai rien trouvé sur microsoft.com... en général, c'est aigu.

C'est juste une idée, je n'ai pas essayé moi-même. Après avoir détecté la profondeur de bits du terminal, utilisez LoadLibrary pour charger dynamiquement la DLL.

 
MetaDriver:

Je continue à demander si vous avez déjà trouvé une solution pour DLL 32/64 ?

Quel est le problème ici ?

Dans l'importation, vous spécifiez deux fonctions identiques, mais avec des paramètres différents (int/long). Dans le programme, en fonction du bit 32/64, vous appelez la fonction correspondante.

 
MetaDriver:

Je continue à demander si vous avez déjà trouvé une solution pour DLL 32/64 ?

Le code pour appeler des fonctions à partir de celles du vent (en passant des pointeurs vers elles) - trouvé.

Grâce au contexte : : tout est résolu proprement.


Yurich:

Dans l'importation, vous spécifiez deux fonctions identiques, mais avec des paramètres différents (int/long). Dans le programme, en fonction du bit 32/64, vous appelez la fonction correspondante.


Par exemple, comme ceci :

#import "MemMap32.dll"
int MemRead(HANDLE32 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import "MemMap64.dll"
int MemRead(HANDLE64 hmem, int &v[], int pos, int sz, int &err); // чтение вектора v с указанной позиции pos размером sz
#import

// переопределяем вызовы для контроля битности
int MemRead(HANDLE64 h, int &v[], int pos, int sz, int &error) { if (_IsX64) return(MemMap64::MemRead(h, v, pos, sz, error)); return(MemMap32::MemRead((HANDLE32)h, v, pos, sz, error));  }
dans un code que vous appelez avec un contexte explicite : :.

::MemRead(...)


En d'autres termes, nous ne multiplions pas les noms de fonctions, mais nous faisons une autodétection du débit binaire et appelons la fonction importée correcte.

 
MetaDriver:

Je continue à me demander si vous avez déjà trouvé une solution pour les DLL 32/64 ?

La méthode la plus simple consiste à placer les DLL x32 et x64 du même nom dans des répertoires différents du système Windows - SysWOW64 et System32, respectivement.

Mais l'échange de données entre programmes est vraiment un problème, surtout si vous l'abordez de manière désordonnée.
Donc probablement raisonné et Microsoft, lorsque dans les années quatre-vingt-dix du siècle dernier, est passé d'un fichier, l'échange de flux pour l'objet - OLE de celui-ci à ActiveX -> COM -> COM + -> .NET, c'est-à-dire basé sur une technologie d'échange inter-programme ont créé un nouveau système de programmation et d'exécution du code.

 
Yurich:

Quel est le problème ici ?

Dans l'importation, vous spécifiez deux fonctions identiques, mais avec des paramètres différents (int/long). Dans le programme, vous appelez la fonction appropriée en fonction de la taille du bit de 32/64.

Il ne veut pas du tout charger la version 32 bits et ne veut pas exécuter le programme même si je ne l'appelle pas déjà (la dll).

Si l'option "Autoriser l'utilisation de la DLL" n'est pas cochée, le bouton [OK] ne s'affiche pas du tout, il est seulement annulé. Autoriser, cliquer sur OK - le programme se bloque. Blocage.

2013.12.19 17:43:20.657 TestFFTdll      'E:\Programs\MetaQuotes_MT5\MQL5\Libraries\fft32.dll' is not 64-bit version


Idéalement, j'aimerais pouvoir appeler dll32 dans le terminal x64. Je sais que c'est théoriquement possible, mais je ne sais pas comment.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация о запущенной MQL5-программе - Документация по MQL5
 
MetaDriver:

Il ne veut pas du tout charger la version 32 bits, et il ne veut pas exécuter le programme même si je ne l'appelle plus (dll).

Lorsque l'option "Autoriser dll" n'est pas cochée, le bouton [OK] ne s'affiche pas du tout, il est seulement annulé. Autoriser, cliquer sur OK - le programme se bloque. Blocage.


Idéalement, j'aimerais pouvoir appeler dll32 dans le terminal x64. Je sais que c'est théoriquement possible, mais je ne sais pas comment.

Je viens de le vérifier :
2013.12.19 18:49:01.437    do (EURUSD,H1)    TEST
2013.12.19 18:49:01.436    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:48:58.929    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version
La bibliothèque n'est pas chargée, mais tout fonctionne jusqu'à ce que sa fonction soit appelée (sortie TEST) ;

Maintenant, nous appelons la fonction d'une telle bibliothèque :
2013.12.19 18:51:07.446    do (EURUSD,H1)    unresolved import function call
2013.12.19 18:51:07.446    do (EURUSD,H1)    Cannot call 'fnCrashTest', 'test.dll' is not loaded
2013.12.19 18:51:07.445    do (EURUSD,H1)    Cannot load 'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll'
2013.12.19 18:51:05.107    do    'E:\MT5_REV1\Client\MetaTrader5Terminal\Final\MQL5\Libraries\test.dll' is not 64-bit version