Diskussion zum Artikel "Offenlegen von C#-Code in MQL5 mithilfe nicht gemanagter Exporte" - Seite 4

 
MetaDriver:

Seit einem Monat schlage ich schüchtern vor, ein Wiki-Tutorial zu mql5 zu erstellen, das von der Community befüllt wird. Das würde die Probleme mit dem Mega-Tutorial lösen. Autoren könnten sogar mit Credits für besonders besuchte Artikel belohnt werden.

Die Wiki-Engine ist kostenlos und verfügbar.

// Wenn Metaquotes es nicht machen will, könnte es jemand anderes auf einer externen Seite machen. Ich für meinen Teil ziehe es in Betracht.

Bei externen Websites gibt es ein Problem - wir haben das Urheberrecht an unserem Material. Und wenn wir ein externes Wiki erstellen, wird fast 100 % des Textes aus Kopien unserer Materialien bestehen.

Man könnte argumentieren, dass öffentliche Wikis eine Utopie sind. Die Idee der öffentlichen Wikis ist in der Praxis schon seit langem begraben. Sehen Sie sich an, wie viel Mühe wir in die Entwicklung unserer Gemeinschaften und Dokumentationen stecken. Das ist eine Menge Geld und tägliche Arbeit.

Die Lösung des Problems liegt im Bereich der verwalteten Inhaltserstellung mit obligatorischer Auslieferung an das Endgerät eines jeden Nutzers. Dies erhöht die Effizienz der Masseneinarbeitung von vernachlässigbaren 0,00x% auf sehr realistische 3-5%.

Wir erhöhen täglich den Umfang und die Konnektivität der MQL5-Materialien. Das Dokumentationsprojekt(MQL5-Sprache, Hilfe, Mehrsprachigkeit) nimmt einen sehr großen Anteil an unserer Arbeit ein.

 
Renat:

Bei externen Websites gibt es ein Problem - wir haben das Urheberrecht an unseren Materialien. Und bei der Erstellung eines externen Wikis werden fast 100 % des Textes aus unseren Materialien kopiert.

Man kann argumentieren, dass öffentliche Wikis eine Utopie sind. Die Idee der öffentlichen Wikis ist in der Praxis längst begraben. Sehen Sie sich an, wie viel Mühe wir in die Entwicklung unserer Gemeinschaften und Dokumentationen stecken. Das ist eine Menge Geld und tägliche Arbeit.

Die Lösung des Problems liegt im Bereich der verwalteten Inhaltserstellung mit obligatorischer Auslieferung an das Endgerät eines jeden Nutzers. Dies erhöht die Effizienz der Masseneinarbeitung von vernachlässigbaren 0,00x% auf sehr realistische 3-5%.

Wir erhöhen täglich den Umfang und die Konnektivität der MQL5-Materialien. Das Dokumentationsprojekt(MQL5-Sprache, Hilfe, Mehrsprachigkeit) nimmt einen sehr großen Anteil an unserer Arbeit ein.

Wie wäre es, wenn wir Wettbewerbe im Rahmen des Tutorials wiederbeleben. Immerhin fragen Neulinge nach einem Lehrbuch.

Machen Sie einen mehrstufigen Wettbewerb, die Teilnehmer melden sich an, reichen einen Lehrbuchplan ein, 50% scheiden aus, der Rest bekommt je 20 Dollar, geht in die zweite Stufe usw.

Bis zum Ende des Marathons wird das Ende der wenigen, aber mit den besten Arbeiten erreichen. Setzen Sie reale Bedingungen für die Erstellung mit einem halben Jahr, brechen Sie es in Phasen und alles wird funktionieren.

 

Das ist ein sehr interessanter und nützlicher Artikel über die allgemeine Interoperabilität von C++ und .NET.

Die am einfachsten zu implementierende Strategie ist "2.4. C++/Cli-Wrapper-Klasse", denn man kann die .NET-API in C++/Cli ohne Probleme verwenden, so dass der einzige Klebstoff-Code eine kleine und einfache Klasse ist, die "gcroot" enthält.

Dieser Ansatz wurde als Grundlage für die Implementierung von http://www.nquotes.net gewählt - einer Bibliothek, die MQL-Programmierung in C# ermöglicht.

Obwohl die erste Version nur MQL4 unterstützt, wird sie in zukünftigen Versionen definitiv auf MQL5 portiert werden.

NQuotes : MetaTrader (MT4) and C#/.NET bridge
  • www.nquotes.net
Debugging in Visual Studio IDE is possible. You can inspect values, place breakpoints and inspect execution step by step. Have a nicer experience than "Print" debugging in pure MQL. Compatible API NQuotes has an API that is compatible with MQL. It is quite easy to get started for MQL4 developers, while others can use the official...
 

Toller Artikel, sehr, sehr praktisch. Aber ...

Ich habe einen kleinen Fehler mit Visual Studio. Wenn ich ein neues Projekt mit der Vorlage erstellen und bauen es, VS hat kein Problem. Ich kann dann das neue Projekt (einschließlich der erstellten DLL) auf der Festplatte in einem Lösungsordner speichern. Die DLL läuft einwandfrei. Wenn ich jedoch das gespeicherte Projekt in VS wieder aufrufe, beschwert es sich, dass das Projekt "RGiescke.DllExport.targets" nicht gefunden wird oder sich nicht auf der Festplatte befindet, obwohl die Datei vorhanden ist.

Ich vermute, es ist ein Problem mit der Projektdatei.....

 

Sehr gutes Tutorial, ich mag das.

großen Dank.

[Gelöscht]  

Hallo Investeo,

Vielen Dank für diesen Artikel war es sehr nützlich, obwohl scheint, dass ich einige Probleme konfrontiert, die versuchen, Vorlage von RGiesecke zu verwenden.

Wenn ich eine DLL erstellt und gebaut habe, verwende ich den DLL Export Viewer, um die Namen der exportierten Funktionen zu überprüfen, damit ich sie über GetProcAddress finden und aufrufen kann. Leider wird die DLL selbst mit der Funktion LoadLibrary geladen, aber GetProcAddress liefert den Fehler 127 - Funktion nicht gefunden. Gleichzeitig zeigt der DLL Export Viewer an, dass keine meiner Funktionen exportiert wurde ...

Könnten Sie bitte vorschlagen, was mit meinem Code falsch sein kann?

using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace ClassLibrary1
{
    public class Class1
    {
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

        [DllExport("Demo", CallingConvention = CallingConvention.StdCall)]
        public static void Demo()
        {
            MessageBox(new IntPtr(0), "Demo", "Demo", 0);
        } 
    }
}

Und dann in Win 32 Konsolenanwendung tue ich das folgende:

HMODULE x1 = LoadLibrary(L"ClassLibrary1.dll");

        if (!x1) 
        {
                MessageBox(0, L"ERROR", L"Library", 0);
                return 0;
        }

        FARPROC x2 = GetProcAddress(x1, "Demo");

        DWORD error = GetLastError();

        if (!x2) 
        {
                MessageBox(0, L"ERROR", L"Proc", 0);
                return 0;
        }

Danke, Art

 
Renat:

Übrigens kann MetaTrader 5 seit einigen Builds Funktionen aus DLLs, die in .NET geschrieben wurden, nativ importieren.

Wir haben diese Unterstützung speziell hinzugefügt, so dass keine Umgehungslösungen mehr erforderlich sind.

Ich habe keine Informationen darüber gefunden, wie man .Net-Funktionen importieren kann. Wer kann, bitte teilen Sie einen Link oder ein einfaches Beispiel.
 
a.p:
Ich kann keine Informationen darüber finden, wie man eine .Net-Funktion aus dem Stegreif erstellt. Wer kann, bitte teilen Sie einen Link oder ein einfaches Beispiel.

Schalten Sie im Editor-Navigator "Alle Dateitypen anzeigen" ein, nehmen Sie Ihre DLL mit der Maus und werfen Sie sie in das MQL5-Fenster des Programms.

Das Ergebnis wird Sie wahrscheinlich überraschen.

Документация по MQL5: Программы MQL5
Документация по MQL5: Программы MQL5
  • www.mql5.com
Программы MQL5 - Документация по MQL5
 
Renat:

Schalten Sie im Editor-Navigator "Alle Dateitypen anzeigen" ein, nehmen Sie Ihre DLL mit der Maus und werfen Sie sie in das MQL5-Fenster des Programms.

Das Ergebnis wird Sie wahrscheinlich überraschen.

cool.

Wenn ich alle Funktionen aus der DLL auf einmal einfügen könnte.

 
Renat:

Schalten Sie im Editor-Navigator "Alle Dateitypen anzeigen" ein, nehmen Sie Ihre DLL mit der Maus und werfen Sie sie in das MQL5-Fenster des Programms.

Sie werden wahrscheinlich vom Ergebnis überrascht sein.

Ausprobiert, MetaEditor stürzt ab

P.S.
Win8 Enterprise 64
MetaEditor build 842
.Net lib hat eine Funktion:
public static int Add(int value1, int value2)
{
return wert1 + wert2;
}