[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 250

 
TarasBY:
Zunächst berechnen Sie den aktuellen Gewinn für alle offenen Aufträge und vergleichen ihn dann mit dem angegebenen Wert: Ist er höher, löschen Sie alle Aufträge. Dieser Vorgang (und nicht nur dieser) wird von diesem EA durchgeführt (der Code ist ebenfalls vorhanden).

Danke für den Hinweis
 

Das verstehe ich nicht.

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

Zhunko:
Es ist immer noch so:

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

Ich habe es dreimal mit diesem Code ausgeführt:

#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));
  }

Das spiegelt sich im Protokoll wider:

строка "", старый вариант: 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

Im ersten Fall haben wir einen Zeiger auf das erste Element des Strukturfeldes MqlStr.string, im zweiten Fall einen Zeiger auf das erste Element der Zeichenkette (LPCSTR ist immer noch dieselbeconst char*). Wir sehen verschiedene Adressen. W-warum? Es stellt sich heraus, dass die Zeichenfolge als ein Array char und die Zeichenfolge als eine interne Struktur der Darstellung in MQL4 unterschiedliche Adressen haben? Oder es bedeutet, dass "String-Struktur" in ExpertSample als internes Format beschrieben ist künstlich, und sein internes Format in MQL4 ist lpsz? Oder habe ich vielleicht den ersten Code falsch verstanden?

 
Können Sie mich bitte beraten, nach Kompilierungen auf das Symbol des EA erscheint ein Schloss und ich kann nur sehen, es im Download-Fenster durch das Programm und in den Ordner ist es unsichtbar, wie es zu beheben? Können Sie es reparieren?
 
In einigen Beispielen sehe ich return(-1), return(0) oder einfach return. Ich verwende return(0), um das Programm von dieser Stelle aus zu unterbrechen. Können Sie mir sagen, was return(-1) und return bewirken?
 
gyfto:
Oder bedeutet es, dass die "String-Struktur", beschrieben in ExpertSample als internes Format, ist künstlich, und in der Tat sein internes Format in MQL4 ist lpsz?

Das bedeutet, dass in der DLL der String genau als char* und nicht als MqlStr übertragen wird, aber es bedeutet nicht, dass im ex4-Programm der String nicht als MqlString gespeichert wird. Im Allgemeinen ist die Übertragung von Parametern von ex4 zu dll (nach Angaben der Entwickler) ein ziemlich komplexer Prozess, der von allen möglichen Prüfungen und Umwandlungen von Parametern begleitet wird.
 
laveosa:
Hallo zusammen, können Sie mich bitte beraten, nach Kompilierungen auf dem Symbol des EA erscheint ein Schloss und ich kann es nur im Download-Fenster durch das Programm sehen und im Ordner ist es unsichtbar, wie es zu beheben? Ich danke Ihnen.
Win 7 und das Terminal befindet sich auf dem Systemlaufwerk? Sie wollen aktuelle und zukünftige Probleme loswerden - verschieben Sie das Terminal auf ein anderes Laufwerk und "alles wird gut".
 
paladin80:
In einigen Beispielen sehe ich return(-1), return(0) oder einfach return. Ich verwende return(0), um das Programm von dieser Stelle aus zu unterbrechen. Können Sie mir sagen, was return(-1) und return bewirken?
Es ist der Rückgabewert der Funktion. Gehen Sie zurück zur Mathematik.
 
paladin80:
In einigen Beispielen sehe ich return(-1), return(0) oder einfach return. Ich verwende return(0), um das Programm an dieser Stelle abzubrechen. Bitte sagen Sie mir, was return(-1) und return bewirken?

return(-1) gibt als Ergebnis der Funktion minus eins zurück, was (-1) nur dann etwas bedeuten kann, wenn der Entwickler dieses Programms es selbst dort platziert hat. Andernfalls bedeutet es nichts.

return beendet einfach die Funktion (wird verwendet, wenn der Rückgabetyp void ist).

 
TarasBY:
Dies ist der von der Funktion zurückgegebene Wert. Gehen Sie zurück zu den Berechnungen.

Im Allgemeinen hält return(0) die Funktion int start() an und wartet auf den nächsten Tick. Was passiert in int start(), wenn es keine Ziffer gibt oder sie -1 ist?

 
TarasBY:
Win 7 und das Terminal befindet sich auf dem Systemlaufwerk? Sie wollen aktuelle und zukünftige Probleme loswerden - verschieben Sie das Terminal auf ein anderes Laufwerk und "alles wird gut".

Herzlichen Dank :) Ich werde es ausprobieren.