Diskussion zum Artikel "Den Ballast selbstgemachter "dynamischer Programmbibliotheken" loswerden" - Seite 2
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Der Autor des Artikels ist sehr dankbar für eine solche zugängliche Präsentation von Informationen über IPC-Interoperabilität ohne Fahrrad-DLLs.
Arbeiten mit Speicher scheint mir ziemlich kompliziert, aber der Ansatz ist klar, mit Ausnahme einiger Fragen, ich hoffe, sachkundige Menschen helfen, zu verstehen:
1. Mit Hilfe von memcpy kopieren wir eine Zwei-Byte-Variable short in das Array uchar[2], wie wird die Information in das Array selbst übertragen?
Welches Format haben die Werte bei Index 0 und 1 des uchar-Arrays?
Der Wert wird byteweise aufgeteilt und in das Array geschrieben, ok ... Ich glaube, ich verstehe das hier.
Ich kann nicht verstehen, welche Werte in dieses Array fallen und wie man den ursprünglichen Wert von ihnen erhält, die Frage ist nicht, dass ich diese Werte nicht auf dem Bildschirm anzeigen kann.
2. Wie füllt man das Array uchar[4] richtig mit Werten unterschiedlichen Typs, wenn man z.B. memcpy kopiert:
Es fühlt sich an, als wäre die Antwort trivial und alles ist einfach, aber wie schreibt man es richtig auf?
Haben SiePrint schon ausprobiert?
Das vierte Beispiel gibt Fehler: 'operator=' - illegale Operation use SAMPLE_04.mq4 34 7
#property copyright ""
#property link ""
#property version ""
#property strict
//Пример 4. Копирование структур средствами MQL5
//---
struct str1
{
double d; // 8 байт
long l; // 8 байт
int i[3]; // 3 * 4 = 12 байт
};
//---
struct str2
{
uchar c[ 8 + 8 + 12 ]; // размер структуры str1
};
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
str1 src; //
src.d = -1; //
src.l = 20; //
//--- заполняем параметры структуры
ArrayInitialize(src.i, 0);
str2 dst; //
//--- превратили структуру в байтовый массив
dst = src; // <----- Ошибка
}
Ich verstehe die Idee mit dem Speicherbereich, aber vielleicht sind die Definitionen nicht ganz richtig?
Können Sie mir sagen, was der Grund dafür ist?
Vielen Dank im Voraus.Die Idee eines Speicherplatzes ist klar, aber vielleicht ist etwas in den Definitionen falsch?
Was ist der Grund dafür?
Strukturen unterschiedlichen Typs können nicht mehr kopiert werden, MQL hat diese Möglichkeit entfernt.
Union verwenden
uchar ist übrigens falsch, und double ist dort auch verdächtig präsent.
Und übrigens sollte src angeben, was genau dazu gehört und übergeben wird.
Jemand hat Sie bereits korrigiert, so wie Sie es vorgeschlagen haben. Gut so. Denkste. Viel Glück!
wird es für MQL4 heute funktionieren?
Die Sprachen (MQL4 / MQL5) sind jetzt völlig gleich - der Unterschied liegt in 2-3 Funktionen, die in MQL4 fehlen(ArrayPrint und etwas anderes Kleines) und in "neuen Features" für MQL5 - Datenbank, DirectX und OpenCL.
aber der Artikel wurde vor 8 Jahren geschrieben, jetzt ist MQL eine streng typisierte Sprache geworden, und um 2 Strukturen zuzuweisen (Beispiel im Artikel) müssen Sie einen Kopierkonstruktor schreiben oder die Struktur in ein Byte-Array serialisieren und dann wieder zurück.
Die Zuweisung von Strukturen unterschiedlichen Typs funktioniert nicht mehr(Parameterumwandlung nicht erlaubt - Variable des gleichen Typs erwartet).
Es wäre aber möglich, mit Unions zu arbeiten: