Erreurs, bugs, questions - page 2580

 
Koldun Zloy:

2. Vous avez mis en évidence une ligne de 200 caractères dans MQL. Puis tu as copié 164 caractères dedans. Après cela, regardez la taille de la chaîne dans MQL. Il reste 200.

La longueur, pas la taille ! Longueur en caractères, taille en octets.
Vérifié, après avoir obtenu une chaîne de 164 caractères, oui la longueur est toujours de 200.
Des idées à ce sujet ?

 
Roman:

Donc pour bien faire, j'ai abandonné memcpy, et utilisé wcscpy ou wcsncpy.
Résultat, poste ci-dessus.

Je voulais dire sizeof( wchar_t* ).

 
Roman:


Section 3.3

Vous feriez mieux de ne pas vous disputer avec moi, mais de lire cet article plus attentivement. Et découvrir ce qui se passe là-bas.

Alors vous n'aurez aucun problème.

Ce que vous voulez faire n'est vraiment pas si compliqué.

 
Roman:

La longueur, pas la taille ! Longueur en caractères, taille en octets.
Vérifié, après avoir obtenu une chaîne de 164 caractères, oui la longueur est toujours de 200.
Des idées à ce sujet ?

La raison de cette situation a déjà été expliquée ci-dessus.

 
Koldun Zloy:

Ce que vous voulez faire n'est vraiment pas si difficile.

Alors dites-moi si ce n'est pas si difficile.
Ou pensez-vous que c'est un comportement normal ?

 
Roman:

Alors dites-moi si ce n'est pas si difficile.
Ou pensez-vous que c'est un comportement normal ?

Vous n'avez donc pas l'intention de comprendre quoi que ce soit, on vous donne une recette toute faite et c'est tout ?

Je ne comprends pas pourquoi vous voulez faire de la programmation si c'est un fardeau pour vous, mais c'est à vous de voir.


Pensez-vous que quelqu'un voudra vous aider si vous posez une question et ne voulez pas montrer un code détaillé et reproductible ?

ou ne le lisent pas, ou discutent avec ceux qui en savent beaucoup plus ?


Il n'y aura donc pas de recette toute faite. Je vais écrire un principe général pour obtenir une chaîne de caractères à partir d'une DLL. Vous pouvez écrire le code vous-même, si vous vous considérez comme un programmeur.


1. Dans MQL, vous créez le tableau ushort.

L'initialiser.

3. Passez le tableau et sa taille à la DLL.

4. Dans la DLL, copiez une chaîne de caractères dans ce tableau en utilisant la fonction wmemcpy_s().

5. Renvoie la longueur de la chaîne copiée de la DLL.

6. En MQL, créez une chaîne de caractères à partir du tableau en utilisant la fonction ShortArrayToString().

 
Les commentaires non liés à ce sujet ont été déplacés vers "Questions des débutants de MQL4 MT4 MetaTrader 4".
 

Sur l'un des serveurs (pas MQ), MT5 devient fou - il charge le CPU à 100% et enregistre intensivement ces messages pour différents instruments :

Mise à jour constante et spontanée de HistoryBase

Les graphiques clignotent. Il est impossible de travailler.

Y a-t-il une possibilité de le réparer localement ou la seule solution est d'attendre que le serveur termine certaines parties ?

 
Koldun Zloy:

Vous n'avez donc pas l'intention de comprendre quoi que ce soit, on vous donne une recette toute faite et c'est tout ?

Je ne comprends pas pourquoi vous voulez faire de la programmation si c'est un fardeau pour vous, mais c'est à vous de voir.

Pensez-vous que quelqu'un voudra vous aider si vous posez une question et que vous ne voulez pas montrer un code détaillé et reproductible ?

ou ne le lisent pas, ou discutent avec ceux qui en savent beaucoup plus ?

Il n'y aura donc pas de recette toute faite. Je vais écrire un principe général pour obtenir une chaîne de caractères à partir d'une DLL. Vous pouvez écrire le code vous-même, si vous vous considérez comme un programmeur.


1. Dans MQL, vous créez le tableau ushort.

L'initialiser.

3. Passez le tableau et sa taille à la DLL.

4. Dans la DLL, copiez une chaîne de caractères dans ce tableau en utilisant la fonction wmemcpy_s().

5. Renvoie la longueur de la chaîne copiée de la DLL.

6. En MQL, créez une chaîne de caractères à partir du tableau en utilisant ShortArrayToString().

Où voyez-vous un argument ici ? Il s'agit d'une discussion de travail, pas besoin de déformer le sens en un poulailler, avec un pathos arrogant.
Vous n'avez rien demandé de tout préparé. Je pensais que vous et le pointeur aviez une solution, mais ce n'est pas le cas.
C'est vous qui n'avez pas lu le sujet ; on discute des tableaux ici depuis longtemps déjà, et tout le monde le sait très bien.
Et ça fait longtemps que je penche pour les tableaux. Mais puisque mql possède une chaîne, pourquoi ne pas l'utiliser directement ?
C'est justement ce bogue dans la chaîne de mql, c'est-à-dire la copie d'un pointeur dans celle-ci, qui nous intéresse ici.
Je vais vous en dire plus, il n'y a pas que par ushort que tout peut être résolu. Les tableaux offrent de nombreuses possibilités.
Mais dans mon cas, je ne veux pas utiliser de tableaux, car la structure du code n'a pas toujours de sens.
D'autant plus que j'ai la chaîne de mql avec laquelle je peux travailler directement, mais elle doit fonctionner correctement.

 

Bonjour à tous, pourriez-vous me dire ce qui peut bien se passer ? Lorsqu'on essaie d'assigner à un pointeur de fonction l'adresse d'une fonction définie dans un autre fichier, le compilateur donne l'erreur "pointeur vers ce type defonction n'est pas encore supporté".

#include <CPositionManagement.mqh>
CPositionManagement posManager;
typedef ulong(*PtrSendOrder)(double,double,string,double,double,datetime,const string,bool);
...
PtrSendOrder ptrBuyFunc=NULL;
PtrSendOrder ptrSellFunc=NULL;
ptrBuyFunc=posManager.SendBuyStop;   // pointer to this function type is not supported yet
ptrSellFunc=posManager.SendSellStop; // pointer to this function type is not supported yet

En même temps, si les mêmes fonctions sont définies dans un fichier mq5 (où l'affectation a lieu), aucun problème ne se pose. L'application à l'adresse par l'opérateur de résolution de contexte ne résout pas non plus le problème (PtrSendOrderptrBuyFunc=CPositionManagement::SendBuyStop).

Raison: