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

 
Soweit ich weiß, verwendet die RGiesecke UnmanagedExportLibrary-Vorlage an einigen Stellen Kommentare wie // Code zum Parsen von IL-Dateien. Russischsprachige Windows-Benutzer fügen dort russische Kommentare wie // Size ein, und deshalb funktioniert seine Vorlage nicht. Es gibt einfach keine Funktionen in der DLL und das ist der Grund, warum der Fehler 127 ausgelöst wird. Schade, nur dieser Vorlage zuliebe möchte ich die Windows-Oberflächensprache nicht ändern, obwohl sie ganz gut funktioniert und korrekt zu sein scheint, zumindest werden die DLLs entladen. Microsoft ist auch ein Besen, man kann problemlos Daten von C++ nach C# übertragen, aber andersherum ist es ein großes Problem.
 

Ich bin auf einem 64 Win 8.

Ich kompilierte es mit vs2013.

Es wird jedoch geladen, aber es gibt einen nicht aufgelösten Importfunktionsaufruf.

Wie kann ich dies lösen?

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) ungelöster Importfunktionsaufruf

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) Cannot find 'Add' in 'Testme.dll'

 

2011.10.29 20:13:37    2000.01.03 00:00  Expert_NN_1_1 USDJPY,H1: cannot call function 'sum' from dll 'NN 1 DLL.dll' (error 127)

Hallo,

Ich erhalte ähnliche Fehler. Wie hast du das gelöst?...

2014.03.28 22:16:41.199 2014.03.25 23:59 Unaufgelöster Importfunktionsaufruf

2014.03.28 22:16:41.199 2014.03.25 23:59 Kann 'Set2DArray' in 'Testme.dll' nicht finden

 
ANG3110:
Soweit ich die RGiesecke UnmanagedExportLibrary-Vorlage verstehe...

Diese Nachricht wurde vor über einem halben Jahr hinterlassen. Hat sich seither etwas geändert????

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Ist es jemandem gelungen, die Funktion ReplaceString zum Laufen zu bringen? Alle Funktionen erfüllen ihren Zweck, außer dieser einen.
 

Methode eins:

Ich habe 64 Win 7, vs2012 C#. Heruntergeladen der Eigentümer testme.zip Vorlage Datei.

In der Mitte der Eingabeaufforderung ein paar Fehler (falscher Pfad, fehlende Dateien, etc. und so weiter und so fort), wurde gelöst.

Aber am Ende, immer noch erscheinen und und oben das gleiche Problem. Ich weiß nicht, ob es jetzt gelöst ist? Welche Methode zu lösen.



Methode zwei:

NuGet installiert RGiesecke Paket.

https://www.nuget.org/packages/UnmanagedExports/1.2.6

Die neueste Version von 201311 meldet

Fehler 2 C:\Users\Administrator\AppData\Local\Temp\tmp8B24\dllTest.il(58) : error : syntax error at token '{ ' in: {
dllTest



Unmanaged Exports (DllExport for .Net)
Unmanaged Exports (DllExport for .Net)
  • www.nuget.org
A set of compile-time libraries (nothing to deploy) and a build task that enable you to export functions from managed code to native applications. That means, you can create plugins in a managed language like C# or F# for native applications that only have a C-Api (like Notepad++). The nuget package is all you need. Just mark your methods with [DllExport] and build for x86, x64 or ia64. Hints: - You have to set your platform target to either x86, ia64 or x64. AnyCPU assemblies cannot export functions. - The export name defaults to the method name and the calling convention to stdcall. If that's all what you want, you can just use [DllExport] without parameters. - You cannot put your exports in generic types or export generic methods. (The CLR wouldn't know what type parameters to use)
[Gelöscht]  

Man kann C++ Stripper mit Hilfe von IJW verwenden, und dann alles in eine einzige DLL rein mittels Compiler - Linker zusammenführen, Perversionen mit der im Artikel beschriebenen Schablone sind nicht nötig, hier kurz beschrieben - http://stackoverflow.com/questions/26226958/include-managed-c-sharp-dll-into-unmanaged-c-dll-all-in-one-single-file.

Tja, und die beschriebene Methode mit dem Template RGiesecke - das ist ein Hack und so etwas funktioniert früher oder später nicht mehr, hat bei mir übrigens auch nicht funktioniert ...

Aber wenn jemand noch mit der im Artikel beschriebenen IL-Methode spielen will, gibt es noch ein Fahrrad, aber das funktioniert auch nicht - https://github.com/winch/winch.pinkbile.com-c-sharp/tree/master/dll_tool/dll_tool.

Include managed C# DLL into unmanaged C++ DLL - all in one single file
Include managed C# DLL into unmanaged C++ DLL - all in one single file
  • stackoverflow.com
In comparison to the question above i need to combine DLLs so that final mixed DLL could export their functions to other unmanaged applications. For this i would like to compile them both as .netmodule and then combine them into one file with a linker so i have : 1) Libs - project with some library in C# - it does not have any dependencies...
 

Hallo,

War jemand in der Lage, eine Struktur mit String-Variablen im Inneren, an die DLL zu senden?

Ich war in der Lage, int, double, float zu senden, aber für String-Variablen bekomme ich diesen Fehler:

Access violation read to 0x0000007B

Hier ist meine C#-Struktur:

        [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct accInfo
        {
            public string broker;
// public String server;
            public int account;
// public String user;

            public double balance;
            public Double credit;
// public String currency;
            public int leverage;
            public int stopout;
            public int stopoutmode;
            public float commission;
            public int lotsize;
            public float minlot;
            public float lotstep;
            public float maxlot;
            public float gmtOffset;

// public String pair;
            public int digits;
            public int point;
            public int tradeAllowed;
            public int swaptype;
            public float swapbuy;
            public float swapsell;
            public int stoplevel;
        };

Und hier ist die mql4-Struktur:

   struct accInfo
   {
      string   broker;
// string server;
      int      account;
// string user;
      
      double   balance;
      double   credit;
// String-Währung;
      int      leverage;
      int      stopout;
      int      stopoutmode;
      float    commission;
      int      lotsize;
      float    minlot;
      float    lotstep;
      float    maxlot;
      float    gmtOffset;
      
// String-Paar;
      int      digits;
      int      point;
      int      tradeAllowed;
      int      swaptype;
      float    swapbuy;
      float    swapsell;
      int      stoplevel;
   };

Ich habe versucht, die String-Variable innerhalb der Struktur zu marshal, aber MT4 stürzt totalaly, kein Fehler nur hängt und zerquetscht in Windows.

       [StructLayout(LayoutKind.Sequential, Pack = 1)]
        public struct accInfo
        {
            [MarshalAs(UnmanagedType.LPWStr)]
            public string broker;
...

Ich danke Ihnen.

Discussion of article "Exposing C# code to MQL5 using unmanaged exports"
Discussion of article "Exposing C# code to MQL5 using unmanaged exports"
  • www.mql5.com
I also provided several examples on how to marshal MQL5 structures against C# and how to invoke exported DLL functions in MQL5 scripts. - Page 2 - Category: articles, library comments
 
Renat Fatkhullin:

Ja, in einiger Zeit werden wir einen neuen Artikel über die Verwendung von DLLs schreiben. Dort sind viele interessante Dinge hinzugefügt worden.

In der Zwischenzeit können Sie die Beispiele aus dem besprochenen Artikel verwenden. Dort gibt es nichts Kompliziertes.

Und ... Wie lange noch warten? Ein Jahr, zwei ... oder 10?

Es sind schon 3 Jahre vergangen. Laut dem eingangs erwähnten Artikel ist es nicht möglich, Methoden aus einer DLL zu importieren. Wo sind die Beispiele?

 

Vielen Dank für diesen Artikel. Ich habe die Ideen hier verwendet, um diese Open-Source-MQL-Bibliothek für C# zu bauen.

https://github.com/jseparovic/MQL4CSharp

Sie befindet sich noch in der Entwicklung und ist derzeit ungetestet, aber erste Tests zeigen, dass die Idee funktioniert.

Es ist sehr einfach in der Art und Weise, wie es Befehle von C# sendet, mit einem Thread für den C#-Code zu laufen, und Getter / Setter für die Kommunikation. MQL fragt jede Millisekunde nach wartenden Befehlen ab, während der C#-Code blockieren kann, bis das Ergebnis geschrieben ist.

Schauen Sie sich https://github.com/jseparovic/MQL4CSharp/blob/master/MQL4CSharp/UserDefined/Strategy/MaCrossStrategy.cs an, um ein Beispiel für die Implementierung einer Strategie in C# zu sehen.

Zum Wohl,

Jason