Guten Tag
Ich kann keine Verbindung zu einem C++ Builder-Projekt herstellen.
Hier ist der Code
void __fastcall TForm1::FormActivate(TObject *Sender) { AnsiString path_MemMap32=ExtractFileDir(ParamStr(0)) + "\\dll\\MemMap32.dll"; AnsiString path_file="Local\\Monitor_USDCHF"; wchar_t * UnicodeString = new wchar_t[path_file.WideCharBufSize()]; path_file.WideChar(UnicodeString,path_file.WideCharBufSize()); delete [] UnicodeString; int (__stdcall *MemOpen) (char * path,int size,int mode,int &err); void (__stdcall *MemClose)(int hmem); int (__stdcall *MemRead)(int hmem, int v[], int pos, int sz, int &err); HINSTANCE hDLL= LoadLibrary(path_MemMap32.c_str()); if(!hDLL) {StatusBar1->SimpleText="I can't load dll";} else {StatusBar1->SimpleText="path_MemMap32.dll load";} MemOpen= (int(__stdcall *)(char * path,int size,int mode,int &err)) GetProcAddress(hDLL,"MemOpen"); MemClose=(void(__stdcall*)(int hmem)) GetProcAddress(hDLL,"MemClose"); MemRead= (int(__stdcall *)(int hmem, int v[], int pos, int sz, int &err)) GetProcAddress(hDLL,"MemRead"); hmem=MemOpen(path_file.c_str(),-1,0,err); StatusBar1->SimpleText=err; }
Die Statusleiste sagt 2, d.h. Datei nicht gefunden, ich habe sowohl in ansi als auch in unicode versucht, den Pfad zur Datei zu senden
In der MT5-Datei hat Expert Advisor eine Datei erstellt und aktualisiert die Kurse darin.
Ich wollte die vorgefertigte dll verwenden.
damit es keine Probleme mit Sparring in MT4-5 gibt.
... Ich werde versuchen, den Quellcode der dll zu sehen.
Was ist Ihr Windows?
win7x64
Ich kann nicht in Builder schreiben.
und ich kann es nicht so schreiben.
#include <vcl.h> #include <stdafx.h> #include "BuySell.h"Ich habe es verstanden.
[C++ Fatal Error] afxv_w32.h(14): F1003 Error directive: WINDOWS.H already included. MFC apps must not #include <windows.h>
Ich habe zuerst versucht, eine Verbindung herzustellen
afxv_w32.h
hat nicht geholfen
Ich habe zuerst versucht, afxwin.h einzubinden - auch das hat nicht geholfen.
Ich habe zuerst versucht, afxwin.h einzubinden - das hat auch nicht geholfen.
Suchen Sie nach angeschlossenen afx.h als eine weitere Option.
Ja, so ist es ohne Fehler verbunden Ich werde weiter versuchen. Danke für den Hinweis.
...
Ich habe es. Alles funktioniert.
Aber CloseHandle schliesst aus irgendeinem Grund nicht.
Ich habe einen Server in der Exe (erstellt Updates und sollte schließen) und im Terminal gibt es einen Empfänger, so dass nach CloseHandle im Server sieht es das fehlgeschlagene Objekt im Speicher.
Ich habe einen Server im Echo (es aktualisiert und schließt es) und einen Empfänger im Terminal, so nach CloseHandle im Server sieht es das fehlgeschlagene Objekt im Speicher.
und Sie erwarten, dass der Speicher vollständig gelöscht wird, wenn der Griff geschlossen wird?
Guten Tag
Bitte teilen Sie mir die Richtung der Gedankenentwicklung mit.
Es gibt eine Aufgabe, Signale innerhalb eines Computers (Server) auf viele Terminals, kritische Verzögerungen von mehr als 1-3 ms zu verteilen.
in einem Bündel von Client-Server implementiert, 1-2 Konten arbeiten akzeptabel und nicht auf das Terminal hängen gemacht Lesen aus dem Speicher mit Sleep(1) in einer Schleife - wenn der Speicher nimmt den notwendigen Wert dann eine Aktion durchführen. Aber wenn Terminals sogar 5 Terminals, 1 ms hier ist nicht machbar, da sonst der Kühler auf dem Prozessor beginnt heulen ...
Ich habe nicht die Nachrichten für eine lange Zeit verfolgt, vielleicht in mt5 gibt es benutzerdefinierte Ereignisse ähnlich wie OnTrade, so dass sie mit Speicheränderung verknüpft werden können.
Ich habe versucht, ohne Verzögerungen 100 000 Zyklen (je 8 Bytes) in 670 ms zu lesen.
... vielleicht sollte ich die Daten auf 4 Bytes reduzieren.
... es gibt wahrscheinlich eine andere Option, um Ihre dll neu zu bauen, um es in der Schleife - nicht die Rückgabe von Daten, bis sie nicht akzeptieren, die erforderlichen Werte. aber wie MT5 wird auf eine solche lange Wartezeit für die Rückkehr von einer externen Funktion reagieren ist eine andere Frage.
Es ist eine Aufgabe, Signale innerhalb eines Computers (Server) zu vielen Terminals zu verteilen, sind Verzögerungen von mehr als 1-3 ms kritisch.
Im Client-Server-Bündel implementiert, funktionieren 1-2 Konten akzeptabel und nicht zu hängen das Terminal gemacht Lesen aus dem Speicher mit Sleep(1) in einer Schleife - wenn der Speicher nimmt den notwendigen Wert führen wir einige Aktion. Aber wenn Terminals sogar 5 Terminals, 1 ms hier ist nicht machbar, sonst der Kühler auf dem Prozessor beginnt heulen ...
Ich habe die Nachrichten schon lange nicht mehr verfolgt, vielleicht gibt es in mt5 ähnliche User-Events wie OnTrade, so dass sie mit der Speicheränderung verknüpft werden können.
In Deinem Fall hat nur der Server das Recht, den Speicher zu verändern, die Clients lesen ihn aus.
- Schauen Sie in Richtung Pipe. Dort sind "Ereignisse" der Datenankunft als selbsterklärend realisiert - wenn es Daten gibt, nehmen wir sie, wenn nicht, warten wir.
Ja, der Server muss geschrieben oder von MSDN kopiert werden, aber vorgefertigte Clients können direkt in MQL5 verwendet werden.
Leider gibt es auch hier keine Möglichkeit, mit der Periodizität des Pollings umzugehen. Sleep(1) in einer solchen Anzahl von Expert Advisors sollte auch bei der Arbeit mit dem Speicher keinen Lärm machen. Sie müssen das Timing der Funktionen überprüfen, vielleicht gibt es irgendwo zusätzliche Durchläufe und Ladungen.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Monitoring von Quotierungen (Speicherabbilddatei = Memory Mapped File):
Dieser Expert Advisor ist ein Beispiel für die Arbeit mit Abbildungsfunktionen bei der Verwendung der Speicherabbilddatei-DLL. In diesem Beispiel des Expert Advisor wird eine virtuelle (Speicherabbild) Datei erstellt und die Aktualisierung der Quotierungen für eine Symbol gestartet. Auf diese Weise können Expert Advisors unter Verwendung von Speicherabbilddateien Daten austauschen (zum Beispiel Quotierungen).
Autor: o_O