[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 250

 

Je ne comprends pas.

gyfto:
//C++
MT4_EXPFUNC int __stdcall GetStrAddress(const char *str) {    
    MqlStr* s = (MqlStr*)str;
    return (int)s->string; 
}

Zhunko:
C'est toujours comme ça :

MT4_EXPFUNC int stdcall GetStrAddress(LPCSTR szStr)
 {    
  return(int(szStr));
 }

Je l'ai fait tourner trois fois avec ce code :

#property indicator_chart_window
#import "stdlib.ex4"
string IntegerToHexString(int integer_number);
#import "StrAddress.dll"
int OldGetStrAddress(string str);
int GetStrAddress(string szStr);
#import

int addrOld;
int addrNew;

int init()
  {
   string s=""; strAddress (s);
   s=s+"something"; strAddress (s);
   s="MyStr"; strAddress (s);
   s="mystr"; strAddress (s);
   return(0);
  }

int start()
  {
   return(0);
  }
void strAddress (string myStr)
  {
   addrOld=OldGetStrAddress(myStr);
   addrNew=GetStrAddress(myStr);
   Print(" строка ", CharToStr(34), myStr, CharToStr(34), ", старый вариант: ", IntegerToHexString(addrOld), ", новый вариант: ", IntegerToHexString(addrNew));
  }

Cela se reflète dans le journal :

строка "", старый вариант: 656D6F73, новый вариант: 01CD8A90
строка "something", старый вариант: 6E696874, новый вариант: 01CD9010
строка "MyStr", старый вариант: 00360072, новый вариант: 01CD8AA0
строка "mystr", старый вариант: 00360072, новый вариант: 01CD8AA8

строка "", старый вариант: 656D6F73, новый вариант: 01C97858
строка "something", старый вариант: 6E696874, новый вариант: 01CDCC30
строка "MyStr", старый вариант: 00360072, новый вариант: 01C978868
строка "mystr", старый вариант: 00360072, новый вариант: 01C997870

строка "", старый вариант: 656D6F73, новый вариант: 01D93108
строка "something", старый вариант: 6E696874, новый вариант: 01CC5A58
строка "MyStr", старый вариант: 00360072, новый вариант: 01D93118
строка "mystr", старый вариант: 00360072, новый вариант: 01D93120

Dans le premier cas, nous avons un pointeur vers le premier élément du champ de la structure MqlStr.string, dans le second cas, nous avons un pointeur vers le premier élément de la chaîne (LPCSTR toujours le mêmeconst char*). Nous voyons des adresses différentes. P-pourquoi ? Il s'avère que la chaîne en tant que char de tableau et la chaîne en tant que structure interne de sa représentation dans MQL4 ont des adresses différentes ? Ou cela signifie que la "structure de chaîne" décrite dans ExpertSample comme format interne est artificielle, et que son format interne dans MQL4 est lpsz ? Ou peut-être que je me suis trompé dans le premier code ?

 
Bonjour à tous, Pouvez-vous me conseiller, après les compilations sur l'icône de l'EA apparaît un verrou et je ne peux le voir que dans la fenêtre de téléchargement à travers le programme et dans le dossier il est invisible, comment le réparer ? Pouvez-vous le réparer ?
 
Dans certains exemples, je vois return(-1), return(0) ou simplement return. J'utilise return(0) pour interrompre le programme à partir de cet endroit. Pouvez-vous me dire ce que font return(-1) et return ?
 
gyfto:
Ou cela signifie-t-il que la "structure de chaîne", décrite dans ExpertSample comme format interne, est artificielle, et qu'en fait son format interne dans MQL4 est lpsz ?

Cela signifie que dans la DLL la chaîne est transférée exactement comme char* et non comme MqlString, mais cela ne signifie pas que dans le programme ex4 la chaîne n'est pas stockée comme MqlString. En général, le transfert des paramètres de ex4 vers dll est (selon les développeurs) un processus assez complexe, accompagné de toutes sortes de vérifications et de transformations des paramètres.
 
laveosa:
Bonjour à tous, Pouvez-vous me conseiller, après les compilations sur l'icône de l'EA apparaît un verrou et je ne peux le voir que dans la fenêtre de téléchargement à travers le programme et il est invisible dans le dossier, comment le réparer ? Merci.
Win 7 et le terminal est sur le lecteur système ? Vous voulez vous débarrasser des problèmes actuels et futurs - déplacez le terminal sur un autre disque et "tout s'arrangera".
 
paladin80:
Dans certains exemples, je vois return(-1), return(0) ou simplement return. J'utilise return(0) pour interrompre le programme à partir de cet endroit. Pouvez-vous me dire ce que font return(-1) et return ?
Il s'agit de la valeur de retour renvoyée par la fonction. Retournez aux mathématiques.
 
paladin80:
Dans certains exemples, je vois return(-1), return(0) ou simplement return. J'utilise return(0) pour interrompre le programme à partir de cet endroit. Dites-moi, que font return(-1) et return ?

return(-1) renvoie moins un comme résultat de la fonction, ce qui (-1) ne peut signifier quelque chose que si le développeur de ce programme l'a mis lui-même. Sinon, cela ne veut rien dire.

return termine simplement la fonction (utilisé lorsque le type de retour est void).

 
TarasBY:
C'est la valeur renvoyée par la fonction. Retournez aux mathématiques.

En général, return(0) arrête la fonction int start() et attend le prochain tick. S'il n'y a pas de chiffre ou s'il est égal à -1, que se passe-t-il dans int start() ?

 
TarasBY:
Win 7 et le terminal est sur le lecteur système ? Vous voulez vous débarrasser des problèmes actuels et futurs - déplacez le terminal sur un autre disque et "tout s'arrangera".

Merci beaucoup :) Je vais essayer.
 
rien
Raison: