Fehler, Irrtümer, Fragen - Seite 2580

 
Koldun Zloy:

1. In MQL wird eine Zeichenkette, nicht ein Zeiger, kopiert.

_DLLAPI void fnReplaceString(wchar_t * text, wchar_t *from, wchar_t * to)
{
   wchar_t * cp;
   
   //проверка параметров
   if(text==NULL || from==NULL || to==NULL) return;
   if(wcslen(from)!=wcslen(to))             return;
 
   //поищем подстроку
   if((cp=wcsstr(text,from))==NULL)         return;

   //заменим
   memcpy(cp,to,wcslen(to)*sizeof(wchar_t));
}
#import "MQL5DLLSamples.dll"
void fnReplaceString(string & text, string from, string to);
#import


Abschnitt 3.3

 
Koldun Zloy:

2. Sie haben eine 200-Zeichen-Zeile in MQL hervorgehoben. Dann haben Sie 164 Zeichen hineingeschrieben. Danach sehen Sie sich die Größe der Zeichenfolge in MQL an. Es bleiben 200.

Länge, nicht Größe! Länge in Zeichen, Größe in Bytes.
Überprüft, nachdem ich eine Zeichenfolge mit 164 Zeichen erhalten habe, ist die Länge immer noch 200.
Haben Sie dazu eine Meinung?

 
Roman:

Um es also richtig zu machen, habe ich memcpy aufgegeben und wcscpy oder wcsncpy verwendet.
Ergebnis, Beitrag oben.

Ich meinte sizeof( wchar_t* ).

 
Roman:


Abschnitt 3.3

Es wäre besser, wenn Sie sich nicht mit mir streiten, sondern diesen Artikel genauer lesen würden. Und finden Sie heraus, was dort vor sich geht.

Dann werden Sie keine Probleme haben.

Was Sie tun wollen, ist wirklich nicht so kompliziert.

 
Roman:

Länge, nicht Größe! Länge in Zeichen, Größe in Bytes.
Überprüft, nachdem ich eine Zeichenfolge mit 164 Zeichen erhalten habe, ist die Länge immer noch 200.
Haben Sie dazu eine Meinung?

Warum dies der Fall ist, wurde bereits oben erläutert.

 
Koldun Zloy:

Was Sie tun wollen, ist wirklich nicht so schwierig.

Sagen Sie mir, ob das nicht zu schwierig ist.
Oder halten Sie dies für ein normales Verhalten?

 
Roman:

Sagen Sie mir, ob das nicht zu schwierig ist.
Oder halten Sie das für ein normales Verhalten?

Sie haben also gar nicht vor, irgendetwas zu verstehen, sondern geben Ihnen einfach ein fertiges Rezept und das war's?

Ich verstehe nicht, warum Sie programmieren wollen, wenn es eine Belastung für Sie ist, aber das ist Ihre Sache.


Glauben Sie, dass Ihnen jemand helfen will, wenn Sie eine Frage stellen und keinen detaillierten, reproduzierbaren Code vorlegen wollen?

oder nicht lesen oder mit denen streiten, die viel mehr wissen?


Daher wird es kein fertiges Rezept geben. Ich werde ein allgemeines Prinzip des Erhaltens einer Zeichenkette von einer DLL schreiben. Sie können den Code selbst schreiben, wenn Sie sich für einen Programmierer halten.


1. In MQL erstellen Sie das ushort-Array.

Initialisieren Sie es.

3. Übergeben Sie das Array und seine Größe an DLL.

4. Kopieren Sie in der DLL mit der Funktion wmemcpy_s() einen String in dieses Array.

5. Gibt die Länge der kopierten Zeichenkette aus der DLL zurück.

6. In MQL erstellen Sie eine Zeichenkette aus dem Array mit der Funktion ShortArrayToString().

 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL4 MT4 MetaTrader 4 Anfängern" verschoben.
 

Auf einem der Server (nicht MQ) spielt MT5 verrückt - er belastet die CPU zu 100% und protokolliert diese Meldungen für verschiedene Instrumente intensiv:

HistoryBase konstante spontane Aktualisierung

Die Diagramme blinken. Es ist unmöglich zu arbeiten.

Gibt es eine Möglichkeit, das Problem lokal zu beheben, oder ist der einzige Ausweg, zu warten, bis der Server einige Spiele beendet hat?

 
Koldun Zloy:

Sie haben also gar nicht vor, irgendetwas zu verstehen, sondern geben Ihnen einfach ein fertiges Rezept und das war's?

Ich verstehe nicht, warum Sie programmieren wollen, wenn es eine Belastung für Sie ist, aber das ist Ihre Sache.

Glauben Sie, dass Ihnen jemand helfen will, wenn Sie eine Frage stellen und keinen detaillierten, reproduzierbaren Code vorlegen wollen?

oder es nicht lesen oder mit denen streiten, die viel mehr wissen?

Daher wird es kein fertiges Rezept geben. Ich werde ein allgemeines Prinzip des Erhaltens einer Zeichenkette von einer DLL schreiben. Sie können den Code selbst schreiben, wenn Sie sich für einen Programmierer halten.


1. In MQL erstellen Sie das ushort-Array.

Initialisieren Sie es.

3. Übergeben Sie das Array und seine Größe an DLL.

4. Kopieren Sie in der DLL mit der Funktion wmemcpy_s() einen String in dieses Array.

5. Gibt die Länge der kopierten Zeichenkette aus der DLL zurück.

6. Erstellen Sie in MQL eine Zeichenkette aus dem Array mit ShortArrayToString().

Wo sehen Sie hier ein Argument? Dies ist eine funktionierende Diskussion, kein Grund, den Sinn mit arrogantem Pathos in einen Hühnerstall zu verwandeln.
Sie haben nicht um etwas Fertiges gebeten. Ich dachte, Sie und der Zeiger hätten eine Lösung, aber das haben Sie nicht.
Sie sind derjenige, der das Thema nicht gelesen hat; es wird hier schon seit langem über Arrays diskutiert, und jeder weiß sehr gut darüber Bescheid.
Und ich neige schon seit langem zu Arrays. Aber da mql String hat, warum nicht direkt verwenden?
Es ist genau der Fehler in mql's String, der einen Zeiger hineinkopiert, den wir hier diskutieren.
Ich sage Ihnen noch mehr, nicht nur durch ushort kann alles gelöst werden. Bei Arrays gibt es viele Möglichkeiten.
Aber in meinem Fall möchte ich keine Arrays verwenden, da die Codestruktur nicht immer sinnvoll ist.
Umso mehr, wenn ich den String von mql habe, mit dem ich direkt arbeiten kann, der aber korrekt funktionieren muss.

Grund der Beschwerde: