Diskussion über "Wie man eine DLL für MQL5 schreibt und Daten in 10 Minuten austauscht". - Seite 4

 
Was ist diese Meldung, die ich bekomme "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Access violation write to 0x00000000 in 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll'?
MT5 Build 240. Das Aufrufen der DLL ist erlaubt.
 
joo:
Was ist diese Meldung, die ich bekomme "2010.01.24 22:41:09 MQL5DLL_Test (GBPJPY,H4) Access violation write to 0x00000000 in 'D:\Soft\Forex\MetaTrader 5\MQL5\Libraries\MQL5DLLSamples.dll'?
MT5 Build 240. Der Aufruf der dll ist aktiviert.

Demo-Beispiel aus dem Artikel:

4. Abfangen von Ausnahmen in DLL-Funktionen

Um einen Absturz des Terminals selbst zu vermeiden, wird jeder DLL-Funktionsaufruf automatisch durch einen Unhandled Exception Wrapper geschützt. Dieser Mechanismus verhindert die meisten Standardfehler (Aufruf von unzugänglichem Speicher, Division durch Null, usw.).

Um die Funktionsfähigkeit dieses Mechanismus zu überprüfen, erstellen wir den folgenden Code:

_DLLAPI void __stdcall fnCrashTest(int *arr)
  {
//--- ожидаем получение нулевой ссылки, чтобы вызвать исключение
   *arr=0;
  }

und rufen Sie es über das Terminal auf:

#import "MQL5DLLSamples.dll"
void fnCrashTest(int arr);
#import

//--- вызовем креш (среда исполнения перехватит исключение и не даст упасть терминалу)
   fnCrashTest(NULL);
   Print("Этого текста не увидите!");
//---

Infolgedessen wird versucht, in die Adresse Null zu schreiben, wobei eine Ausnahme erzeugt wird. Das Terminal fängt es ab, meldet es im Protokoll und setzt seine Arbeit fort:

MQL5DLL Test (GBPUSD,M1) 20:31:12 Access violation write to 0x00000000


 
Renat:
Aus dem Artikel ein Demonstrationsbeispiel:

Ich danke Ihnen. Ich war also nicht sehr aufmerksam, als ich den Artikel las. :)

PS Ich hätte auch etwas sagen können wie: "Hör zu, Genosse! Lesen Sie den Artikel noch einmal", und Sie werden Recht haben. Respekt und Respekt, wie man so schön sagt.

 
Renat:

Lieber Pisara,

Um es klar zu sagen: Wir führen hier einen Streit zwischen einem Theoretiker und einem Praktiker .
Ohne persönlich zu werden, auf den Punkt gebracht. Ein guter Theoretiker verlässt sich auf die praktische Erfahrung, ein guter Praktiker misst siebenmal.

Natürlich verbietet Ihnen niemand, für den "Weltfrieden" zu kämpfen, aber berücksichtigen Sie mehr Faktoren als "warum nicht verbessern?

Das habe ich geschrieben - Sie werden es nicht benutzen, weil Sie keine Routinearbeit machen wollen. Man muss Ihnen alles auf dem Silbertablett servieren - alle Indikatoren, das gesamte Marktumfeld, die gesamte Geschichte in verschiedenen Zeiträumen usw. Und Sie müssen Charts erstellen, denn Sie können nicht alle Indikatoren in Ihrem Kopf manipulieren.

Sie brauchen also eigentlich ein vollwertiges Terminal. Und wir geben es Ihnen: MetaTrader 5 + MQL5 + DLL. Nennen Sie es ein Framework oder sagen Sie einfach - geben Sie uns das Terminal in Quellcode/Komponenten (denn das ist es, was Sie verlangen).

Es geht hier nicht darum, Frieden zu stiften, aber man muss zugeben, dass die Erleichterung des Lebens für den Programmierer und die Verbesserung der Qualität des Handelssystems und seiner Integrationsmöglichkeiten noch niemandem geschadet haben. Nicht weit entfernte Beispiele: Borland Delphi, MS .net haben ein vollständig offenes Framework / Komponentenbasis / Klassendiagramme und sogar einen bedeutenden Teil des Quellcodes (Delphi) für Plattformbenutzer.

Programmierer halten es fälschlicherweise für "mächtig", Skripte für Handelssysteme in ungeschützten Muttersprachen schreiben zu können, und sind dann überrascht, dass niemand ihre Kreationen verwenden wird. Deshalb sterben sie, bevor sie geboren werden. Diejenigen, die eine Benutzergemeinschaft entwickelt und aufgebaut haben, denken tiefer (weil sie die Schläge vorher bekommen haben) und machen solche Fehler nicht.
Lassen Sie uns realistisch sein. Wenn Sie eine Software herausgeben und verkaufen wollen und in sechs Monaten oder einem Jahr ein kostenpflichtiges Update herausbringen wollen, dann ist der Schutz des Codes sehr wichtig für Sie. Wenn Sie, wie ich es verstehe, langfristig hier sind und die Plattform mit einer Kette von Builds und Support kontinuierlich verbessern, dann wird Sie kein Wettbewerber bekommen. Aber die Benutzer werden in der Lage sein, viel besseren Code zu schreiben. Und nicht nur der Code, sondern auch die TK-Struktur, die nicht weniger wichtig ist! Ich kann sogar eine Analogie mit Antiviren bringen - das Hacken des AV-Clients gibt noch keinen Zugriff auf die Aktualisierung der Virendatenbank (hier - Quoten).

Ein kontrollierter (standardmäßig deaktivierter) DLL-Aufruf ist akzeptabel, aber das Herunterladen von DLLs, die von jemandem erstellt wurden, auf Ihr Handelsterminal ist eine Lücke, die schlimmer ist als ein nicht gepatchter Internet Explorer 6.
Dieses Loch ist also nur eine Erlaubnis des Benutzers! Wie kann ein unbedarfter Benutzer garantieren, dass eine DLL zu 100 % unschädlich ist, selbst wenn sie von Unternehmen X signiert ist? Denn wenn er sie im Zweifel verbietet, wird er nie wissen, ob sie ihm nützlich ist oder nicht. Hier haben wir also etwas Psychologie.


Zu Ihrer Information: Google Trends-Statistiken über automatisierte Handelsterminals:

Ich frage mich, ob die Skala der Ordinaten logarithmisch ist?
Übrigens, die russischen Daten sind interessant, und wir können sehen, dass der rote Metastock führend ist:

Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
Google Тренды - Сервис: Поиск по Интернету. Запросы не указаны. - По всему миру, 2004 – настоящее время
  • www.google.ru
Изучайте популярные поисковые запросы при помощи службы "Google Тренды".
 

Verwenden Sie bitte die regulären "Antwort"-Funktionen. Es ist sehr unangenehm zu lesen.

Um einen zitierten Block aufzulösen, setzen Sie den Cursor an die gewünschte Stelle und wählen Sie den Stil "Einfacher Text" oder drücken Sie Strg+1.


Generell empfehle ich Ihnen, mit dieser Art von Ratschlägen aufzuhören - sie sind grundsätzlich tödlich, basieren auf falschen Annahmen und eignen sich nicht für die angewandte Sprache.

Dazu gibt es einen alten Witz:

Сидят двое нищих. Перед каждым из них шляпа и надпись. У одного: «Подайте бедному еврею», у второго: «Подайте бедному арабу». Шляпа первого пуста, а в шляпе второго куча денег.

Ein Passant geht auf einen Juden zu, wirft einen Rubel ein und sagt: "Ich bin ein Jude:

- Hör zu, ändere das Schild, sonst bleibst du hungrig.

Als der Passant wegging, drehte sich der Jude zu seinem Nachbarn um und sagte: "Ich bin ein Jude:

- Verstehst du, Izya? Dieser Mann wird uns etwas über den Handel beibringen!

 
Renat:

Benutzen Sie bitte die normalen "Antwort"-Funktionen. Es ist sehr unangenehm zu lesen.

Um einen zitierten Block zu unterbrechen, setzen Sie den Cursor an die richtige Stelle und wählen Sie den Stil "Einfacher Text" oder drücken Sie Strg+1.


Generell empfehle ich Ihnen, mit dieser Art von Ratschlägen aufzuhören - sie sind von Grund auf mörderisch, basieren auf falschen Annahmen und sind für eine angewandte Sprache nicht geeignet.

Dazu gibt es einen alten Witz:


OK, wenn Sie nicht die wahren Gründe nennen wollen, warum die Prämisse mörderisch ist und warum das .net-Framework für Sie zu eng ist, ist die Diskussion beendet. Was den Scherz betrifft, so messen Sie selbst, das Kloster gehört Ihnen.

Bleibt nur noch, allen viel Glück zu wünschen, dass sie sich nach dem Upgrade auf 5 nicht zurücklehnen.

 
Renat, herzlichen Dank für den Artikel! Es ist sehr interessant und informativ. Leider ist es mir nicht gelungen, das Skript MQL5DLL Test.mq5 zu verwenden. Ich habe alles so gemacht, wie es in dem Artikel beschrieben ist. Als ich das Skript jedoch ausführte, stürzte MT5 einfach ab. Ich weiß nicht, was das Problem ist. Könnte es sich um die Frage der Achse handeln? Ich verwende MS Vista x64. Bitte beraten Sie mich, wie ich das Problem beheben kann :-)
 
denkir:
Renat, herzlichen Dank für den Artikel! Es ist sehr interessant und informativ. Leider ist es mir nicht gelungen, das Skript MQL5DLL Test.mq5 zu verwenden. Ich habe alles so gemacht, wie es in dem Artikel beschrieben ist. Als ich das Skript jedoch ausführte, stürzte MT5 einfach ab. Ich weiß nicht, was das Problem ist. Vielleicht ist es die Frage der Achse? Ich verwende MS Vista x64. Bitte beraten Sie mich, wie ich das Problem beheben kann :-)

Lesen Sie bitte den ganzen Artikel noch einmal.

Es gibt nur eine Stelle über die Fehlergenerierung (Schreiben in Null-Adressen) innerhalb der DLL, und weitere Fehlerabfangung durch Terminal ohne Absturz. Es ist notwendig, den Aufruf der Methode fnCrashTest auszukommentieren.

Heute werde ich diesen Code auf Vista x64 überprüfen - vielleicht ist es unser Fehler.

 
Renat писал(а) :

Lesen Sie bitte den ganzen Artikel noch einmal.

Es gibt nur eine Stelle über die Fehlererzeugung (Schreiben in Null-Adressen) innerhalb der DLL und weiteres Abfangen dieses Fehlers durch Terminal ohne Absturz. Sie sollten den Aufruf der Methode fnCrashTest auskommentieren.

Heute werde ich diesen Code auf Vista x64 überprüfen - vielleicht ist es unser Fehler.

Ja, ich habe alles sorgfältig und mehr als einmal gelesen :-))

Ich habe vergessen, Ihnen zu sagen, dass ich die Funktion fnCrashTest(int arr) im Skript MQL5DLL Test.mq5 auskommentiert habe. Ich bekomme immer noch einen Absturz. :-(

So sieht es aus. Oder muss ich die Funktion fnCrashTest(int arr) im DLL-Code auskommentieren?

=========================
#import "MQL5DLLSamples.dll"
int  fnCalculateSpeed(int &res1,double &res2);
void fnFillArray(int &arr[],int arr_size);
void fnReplaceString(string text,string from,string to);
//void fnCrashTest(int arr);
#import
=========================

//fnCrashTest(NULL);
//Print("Этого текста не увидите!");

 

1) Welche Version des Terminals ist 32 oder 64 Bit?

2) Welche Version der DLL ist 32 oder 64 Bit?

Grund der Beschwerde: