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
uchar - Unsigned Character, warum sollten Sie das für eine Schleife verwenden? das macht für mich keinen Sinn ... verwenden Sie einen int. Sie werden mit ulongs arbeiten, das ist, was eine neue datetime ist ... und wenn Sie typecast, ohne darüber nachzudenken in der Zukunft werden Sie gewarnt werden ... mit der Warnung umgehen oder sie ignorieren. Hoffen Sie nicht nur auf das Beste, sondern machen Sie es wie jetzt, lernen und verstehen Sie.
Das, was Sie auf Stackoverflow gepostet haben, macht für mich Sinn, ich denke, es ist ein guter Rat.
uchar war nur ein Beispiel, da sich meine Frage auf die Verwendung von kleinen Variablentypen bezog. uchar ist ein positiver 1-Byte-Wert von 0 bis 255, so dass Sie für eine Schleife 0 bis 100 das 1-Byte uchar verwenden könnten.
Wenn Sie einen von einer Funktion zurückgegebenen Wert speichern müssen und die betreffende Funktion einen uchar-Wert zurückgibt, dann verwenden Sie eine uchar-Variable, um den zurückgegebenen Wert zu speichern ... mit dem ursprünglichen mql4 war dies kein Problem, mit dem neuen mql4 wird es eher ein Problem sein.
Als ich die Frage stellte, wusste ich nicht, warum ich das wollte, deshalb stellte ich die Frage lol...
Ich wusste nicht, ob ein 8-Bit-Variablentyp schneller als ein 32-Bit-Variablentyp verarbeitet werden würde, oder ob er langsamer oder einfach gleich wäre, ich wusste nicht, ob ein 8-Bit-Wert weniger RAM oder weniger Festplattenplatz verbrauchen würde. Da wir jetzt diese kleinen Variablentypen zur Verfügung haben, war ich einfach daran interessiert, die Vor- und Nachteile ihrer Verwendung zu erfahren, wenn sie zu den Anforderungen des Codeblocks passen würden, im Gegensatz zum generellen Festhalten an 32-Bit-Ganzzahlen.
Ich dachte, ein 32-Bit-Betriebssystem könnte vielleicht vier 8-Bit-Werte gleichzeitig verarbeiten, aber ich wusste es nicht. Offenbar nicht. Das erklärt, warum ein 64-Bit-Betriebssystem nicht wirklich viel schneller ist als ein 32-Bit-Betriebssystem, abgesehen von der Tatsache, dass es auf mehr RAM zugreifen kann. Darüber hatte ich mich schon oft gewundert.
Ich habe eine Frage, für die ich keine Lösung gefunden habe.
Wie kann man void& verwenden? Ich meine, wenn ich einen Zeiger an eine DLL senden muss. In der Hilfedatei gibt es Funktionen, die diesen void-Typ verwenden, aber wenn ich ihn irgendwo in den Quellcode einfüge, lässt er sich nicht kompilieren. Ich habe versucht, Template als Workaround zu verwenden, aber Template ist innerhalb der #import-Anweisung verboten.
Ich habe die Konstruktion für einzelne Typen verwaltet, aber ich bin nicht in der Lage, die Übergabe eines void&-Array-Zeigers an die DLL zu implementieren, es sei denn, ich gebe den expliziten Typ an.
Gibt es eine Einschränkung für die Übergabe eines Arrays von Strukturen an eine DLL?
Angenommen, MT4Structure ist eine einfache Struktur.
Nachdem ich die kernel32.dll importiert habe, funktioniert eine einzelne Struktur ganz gut:
Aber ich bin nicht in der Lage, ein Array von Strukturen zu akzeptieren. Der Compiler wird nicht mit MT4Structure&[] kompilieren , wenn esals Parameter an diese Deklaration gesendet wird:
Gibt es irgendeine Einschränkung für die Übergabe Array von Strukturen an eine DLL?
Ich kann nicht sehen, ein Problem mit so etwas wie dieses:
Es funktioniert wie erwartet (vorausgesetzt, dass Sie für unterschiedliche Standard-Struktur-Ausrichtung in MT4 und die DLL ermöglichen).
(BTW, ich bin mir nicht sicher, was die interne Repräsentation eines MQL4 bool ist, aber ich würde es vorziehen, Win32-Funktionen als int zu deklarieren. Win32-Funktionen geben eher ein BOOL als ein C++ bool zurück. Ein BOOL ist ein Windows-Makro für eine 4-Byte-Ganzzahl, deren Wert 1/0 ist, während ein C++ bool ein einzelnes Byte ist. Wenn Sie MT4 mitteilen, dass es ein einzelnes Byte als Rückgabewert von Funktionen erwartet, obwohl diese in Wirklichkeit vier Bytes zurückgeben, könnte es - obwohl es sehr unwahrscheinlich ist - zu einer Beschädigung des Stacks kommen).
Wie kann man void& verwenden? Ich meine, wenn ich einen Zeiger an eine DLL senden muss.
Ich bin mir nicht ganz sicher, was Ihre Frage ist. In der Dokumentation der Win32-API wird zum Beispiel void* verwendet, um zu sagen: "Dies akzeptiert jeden Typ von Zeiger auf irgendetwas; die Win32-Funktion kümmert sich nicht darum, was Ihr Speicherblock ist".
Ich bin mir nicht ganz sicher, was Ihre Frage ist. In der Dokumentation der Win32-API wird zum Beispiel void* verwendet, um zu sagen, dass "dies jeden Zeigertyp auf irgendetwas akzeptiert; die Win32-Funktion kümmert sich nicht darum, was Ihr Speicherblock ist".
Ganz genau. Aber es scheint, dass dies mit MQL4 nicht ganz möglich ist, und die Verwendung einer Vorlage ist innerhalb des #import-Blocks nicht erlaubt. Die Verwendung einer zusätzlichen Struktur mit winapi führt also dazu, dass die #import-Deklarationen jedes Mal manuell aktualisiert werden müssen, wenn ein neuer Typ benötigt wird. Das ist ziemlich unangenehm für mich, da meine Absicht war, die Importe an einer Stelle zu verwalten.
Exakt. Aber es scheint, es ist nicht ganz möglich mit der MQL4, und mit einer Vorlage ist nicht innerhalb #import Block erlaubt. Die Verwendung einer zusätzlichen Struktur mit winapi führt also dazu, dass die #import-Deklarationen jedes Mal manuell aktualisiert werden müssen, wenn ein neuer Typ benötigt wird. Das ist für mich ziemlich unangenehm.