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

 

Neuer Artikel Offenlegen von C#-Code in MQL5 mithilfe nicht gemanagter Exporte :

In diesem Beitrag stelle ich verschiedene Interaktionsmethoden zwischen MQL5-Code und gemanagtem C#-Code vor. Ich habe auch mehrere Beispiele dafür bereitgestellt, wie MQL5-Strukturen gegen C# angeordnet werden können und wie sich exportierte DLL-Funktionen in MQL5-Scripts aufrufen lassen. Ich bin überzeugt, dass die hier bereitgestellten Beispiele als Basis für zukünftige Forschungen zum Schreiben von DLLs in gemanagtem Code dienen können. Dieser Beitrag bereitet auch Wege für die Nutzung bereits in C# implementierter Bibliotheken in MetaTrader.

Abbildung 2. Modell der COM-Interoperabilität

Autor: investeo

 
Sehr nützlicher Artikel! Vielen Dank für die ausführliche Darstellung.
 
Academic:

Sehr nützlicher Artikel! Ich danke Ihnen für die ausführliche Darstellung.

Ja, ich danke Ihnen.

Eh, Metaquotes hat versucht, die Leistung zu verbessern, um vom Byte-Code wegzukommen... und wir stecken immer noch alle Programme darin! )))

Frage an den Autor: Wurden vergleichende Tests der Ausführungszeit von reinen MQL5-Programmen, DLLs und .NET-Monstern durchgeführt? Es wäre interessant, einen Blick darauf zu werfen.

[Gelöscht]  
alsu:

Ja, danke.

Eh, Metaquotes hat versucht, die Leistung zu verbessern, um vom Byte-Code wegzukommen... und wir werden immer noch alle Programme da reinstopfen! )))

Frage an den Autor: Wurden vergleichende Tests der Ausführungszeit von reinen MQL5-Programmen, DLLs und .NET-Monstern durchgeführt? Es wäre interessant, einen Blick darauf zu werfen.

Ich schließe mich der Frage an. Ich interessiere mich für die Ausführungszeit für MQL, VB.NET(managed), C++(managed/unmanaged), C#(managed/unmanaged). Und noch eine Frage an alle. Wo (außer in VB - dort ist es möglich) kann man dynamische Arrays verwenden, um den Code von MQL5 in ein schnelleres Programm oder DLL ohne Änderungen zu übertragen. In VB ist alles fast identisch mit MQL (Operatoren für die Arbeit mit dynamischen Arrays), aber welche Sprachen haben auch alles Notwendige?
 
Hallo,
Ich denke, dass
es im Prinzip sehr nützlich ist , mögliche Ressourcen zu erschließen und finde diesen Artikel sehr interessant. Allerdings bin ich kein sehr erfahrener Programmierer und habe dahereinige Fragen.

Aus meiner Sicht gibt mir unmanaged Code die Möglichkeit, die Plattform unabhängig zu entwickeln. Aber wenn jemand Metatrader benutzt, hat er eine definierte Plattform.

Was ist der Vorteil mit unmanaged Code im Allgemeinen und in Kombination mit MQL5 ? - Bitte korrigieren Sie mich , wenn ich etwas missverstanden habe!


 
smartwart:
Hallo,
Ich denke, dass
es im Prinzip sehr nützlich ist , mögliche Ressourcen zu erschließen und finde diesen Artikel sehr interessant. Allerdings bin ich kein sehr erfahrener Programmierer und habe dahereinige Fragen.

Aus meiner Sicht gibt mir unmanaged Code die Möglichkeit, die Plattform unabhängig zu entwickeln. Aber wenn jemand Metatrader benutzt, hat er eine definierte Plattform.

Was ist der Vorteil mit unmanaged code im Allgemeinen und in Kombination mit MQL5 ? - Bitte korrigieren Sie mich , wenn ich etwas missverstanden habe!


Hallo smartwart,

Der Vorteil ist, dass es eine große Menge an bereits entwickeltem Code in C# gibt, den Sie für Handelszwecke verwenden können. In meinem nächsten Artikel werden Sie mehr darüber lesen.

cheerz,

Investeo

 

Das ist die beste Sache überhaupt! Ich liebe C# und ich habe nach jeder Möglichkeit gesucht, es zum Laufen zu bringen! Die beste Nachricht des Jahres! Ich glaube, das war das letzte Mal, als ich EA in MQL5 geschrieben habe. Ich werde die gesamte Logik in Bibliotheken unterbringen und eine Vorlage EA.mq5 für alle meine EAs verwenden (nur werden sie mit verschiedenen Bibliotheken verlinkt sein).

Ich danke Ihnen!

 
alsu:

Ja, danke.

Eh, Metaquotes hat versucht, die Leistung zu verbessern, um vom Byte-Code wegzukommen... und wir werden immer noch alle Programme da reinstopfen! )))

Frage an den Autor: Wurden vergleichende Tests der Ausführungszeit von reinen MQL5-Programmen, DLLs und .NET-Monstern durchgeführt? Es wäre interessant, einen Blick darauf zu werfen.

Von welchem Bytecode sind sie weggekommen? Hatten sie ihn in 4? Dort gab es nur einen langsamen Compiler ohne Optimierung.

Unter .NET gibt es keinen Bytecode, beim Start wird alles in nativen Maschinencode kompiliert, mit Optimierung für einen bestimmten Prozessor. Wenn die Zeit für die erste Kompilierung entscheidend ist, verwenden Sie ngen http://msdn.microsoft.com/ru-ru/library/6t9t5wcf.aspx.

Und Tests ja... wären interessant

Ich persönlich benutze nur 2 der beschriebenen Methoden, von den anderen habe ich nur gehört. Habe wirklich nicht verstanden, wie COM-interop helfen kann, naja es war wohl der Vollständigkeit halber. Der Artikel ist 5.

Ngen.exe (генератор образов в машинном коде)
Ngen.exe (генератор образов в машинном коде)
  • msdn.microsoft.com
Внимание Единственный сценарий, в котором необходимо устанавливать зависимость отдельно — это загрузка зависимости приложением с помощью отражения, например путем вызова метода . Важно Примечание Формирование образов для различных сценариев Например, при выполнении сборки в рамках...
 
VDev:

Von welcher Art von Bytecode sind sie abgekommen? Hatten sie ihn in 4? Es gab nur einen langsamen Compiler ohne Optimierung.

MQL4 hatte Bytecode, während MQL5 in Bytecode kompiliert wird mit anschließender Vorkompilierung in native x86 oder x64 vor der Ausführung. MQL5 verhält sich wie .NET

MQL5 wird als Sprache weiterentwickelt (Entwickler fordern mehr Funktionalität und bessere Kompatibilität mit C++), und sein Optimierer wird verbessert.

In den neuesten Builds ist es nun möglich, Ressourcen (.BMP und .WAV) über #resource direkt in EX5-Dateien einzubinden, wodurch Sie autarke Anwendungen erstellen können. Dies ist eine gute Grundlage für die Entwicklung und den Verkauf vollwertiger Anwendungen für die MetaTrader 5 Plattform. Die Beta-Version des MQL5-Marktes wird bald veröffentlicht werden, wo jeder Entwickler seine Anwendungen verkaufen kann (nach strenger Moderation), und alle Händler werden direkten Zugang zu diesem Shop haben.

 

Bin ich der einzige, der nicht kompilieren können Vorlagen für unmanaged Export für VS C#?

Ich habe die Vorlage aus dem Artikel genommen (sie ist nicht vollständig, es fehlt dll) und sie mit Bibliotheken von R. Giesecke ergänzt, die hier entnommen wurden. Giesecke Bibliotheken genommen hier http://sites.google.com/site/robertgiesecke/Home/uploads,

habe die Originalvorlage von R. Giesecke, habe auch eine Mischung aus den beiden Vorlagen gemacht, da kommt nichts raus.

Beim Kompilieren der Originalvorlage gibt der Compiler folgendes aus:

------ Построение начато: проект: UnmanagedExportLibrary8, Конфигурация: Debug Any CPU ------
Построение начато 15.03.2011 19:02:04.
CoreCompile:
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /define:DEBUG;TRACE /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /debug+ /debug:full /out:obj\Debug\UnmanagedExportLibrary8.dll /target:library DllExport\DllExportAttribute.cs UnmanagedExports.cs Properties\AssemblyInfo.cs
CopyFilesToOutputDirectory:
  Копирование файла из "obj\Debug\UnmanagedExportLibrary8.dll" в "bin\Debug\UnmanagedExportLibrary8.dll".
  UnmanagedExportLibrary8 -> d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\UnmanagedExportLibrary8.dll
  Копирование файла из "obj\Debug\UnmanagedExportLibrary8.pdb" в "bin\Debug\UnmanagedExportLibrary8.pdb".
AfterBuild:
  ILDasm: calling 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe' with /quoteallnames /unicode /nobar /linenum "/out:c:\Temp\tmpF417\UnmanagedExportLibrary8.il" "d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\UnmanagedExportLibrary8.dll"
  ILDasm: ildasm 'C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe' returned gracefully.
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\UnmanagedExportLibrary8.dll : Export warning EXP0009: Platform is AnyCpu, creating binaries for each CPU platform in a separate subfolder...
  ILAsm: Found method: UnmanagedExportLibrary8.UnmanagedExports..method private hidebysig static float64 'AddDays'(float64 'dateValue', int32 'days') cil managed
  ILAsm: Removing RGiesecke.DllExport.DllExportAttribute from UnmanagedExportLibrary8.UnmanagedExports.AddDays
  ILAsm: Parsing 242 lines of IL took 66 ms.
  ILAsm: calling 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\ILAsm.exe' with /nologo "/out:d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\x86\UnmanagedExportLibrary8.dll" "c:\Temp\tmpF417\UnmanagedExportLibrary8.x86.il" /DLL "/resource=c:\Temp\tmpF417\UnmanagedExportLibrary8.res"  /debug  
  ILAsm: ILAsm 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\ILAsm.exe' returned gracefully.
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : 
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembling 'c:\Temp\tmpF417\UnmanagedExportLibrary8.x86.il'  to DLL --> 'd:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\bin\Debug\x86\UnmanagedExportLibrary8.dll'
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Source file is UNICODE
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : 
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::.ctor
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::get_CallingConvention
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::set_CallingConvention
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::get_ExportName
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : Assembled method RGiesecke.DllExport.DllExportAttribute::set_ExportName
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : 
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : ***** FAILURE ***** 
d:\Programming\Visual Studio 2010\Projects\UnmanagedExportLibrary8\UnmanagedExportLibrary8\DllExport\RGiesecke.DllExport.targets(8,5): error : 
     в RGiesecke.DllExport.Parsing.IlParser.RunILTool(String installPath, String toolFileName, String requiredPaths, String workingDirectory, String settingsName, String arguments, String toolLoggingCode, String verboseLoggingCode, DllExportNotifier notifier, Int32 timeout)
     в RGiesecke.DllExport.Parsing.ILAsm.RunCore(CpuPlatform cpu, String fileName, String ressourceParam, String ilSuffix)
     в RGiesecke.DllExport.Parsing.ILAsm.Run(String outputFile, String ilSuffix, CpuPlatform cpu)
     в RGiesecke.DllExport.Parsing.ILAsm.ReassembleFile(String outputFile, String ilSuffix, CpuPlatform cpu)
     в RGiesecke.DllExport.DllExportWeaver.RunILAsm(ILAsm ilAsm)
     в RGiesecke.DllExport.DllExportWeaver.Run()
     в RGiesecke.DllExport.MSBuild.DllExportTask.Execute()

СБОЙ построения.

Затраченное время: 00:00:01.85
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Beim Kompilieren anderer Templates etwa das gleiche.

System: W7 x64 SP1 Home Prem Lic.

IDE: VS 2010.

Google hilft nicht (.

Ich habe die Projekt-dll manuell erstellt und nach den Empfehlungen von R. Giesecke, auch kein Ergebnis.

Bitte helfen Sie mit Ratschlägen.

Robert Giesecke
  • sites.google.com
Deployed as nuget package!no longer limited to C#!VS 2008 is no longer supported (it has no nuget support)Various fixes regarding path reslution for ildasm.exe, ilasm.exe and lib.exeexport names are escaped, so using il keywords like add won't be a problem any moreThe task will only execute when you have selected a specific CPU target (x86...
 
kPVT:

Ich habe nicht kompiliert eine Vorlage für die unmanaged Export zu VS C #?

Habe eine Vorlage aus dem Artikel (es ist nicht vollständig, nicht fehlende dll) zu den Bibliotheken von R. Giesecke entnommen , hier http://sites.google.com/site/robertgiesecke/Home/uploads ,

nahm die ursprüngliche Vorlage von R. Giesecke, wie eine Mischung aus zwei Vorlagen, es funktioniert nicht.

Beim Kompilieren der Originalvorlage erzeugt der Compiler das Folgende:

Beim Kompilieren anderer Vorlagen etwa das gleiche.

System: W7 x64 SP1 Home Prem Lic.

IDE: VS 2010.

Google hilft nicht (.

Dll erstellt manuell ein Projekt und ergänzt es gemäß den Empfehlungen von R. Giesecke, das Ergebnis ist auch nicht verfügbar.

Hilfe pliz Beratung.

Hallo kPVT,

Gibt es etwas Windows7 - XP Abwärtskompatibilitätsmodus ind Win7? Wenn die dll im 32-Bit-Modus funktioniert, muss sie auf 64 Bit rekompiliert werden, damit sie funktioniert.

Ich werde versuchen, RGiesecke selbst auf stackoverflow.com zu fragen.

Mit besten Grüßen,

Investeo