Discussione sull’articolo "Esposizione del codice C# in MQL5 utilizzando esportazioni non gestite" - pagina 5

 
Per quanto ne so, il modello UnmanagedExportLibrary di RGiesecke utilizza commenti come // Code per il parsing dei file IL in alcuni punti. Gli utenti di Windows di lingua russa inseriscono commenti russi come // Size e questo è il motivo per cui il modello non funziona. Semplicemente non ci sono funzioni nella DLL e questo è il motivo per cui viene lanciato l 'errore 127. È un peccato, per il bene solo di questo modello non voglio cambiare il linguaggio dell'interfaccia di Windows, anche se funziona abbastanza bene e sembra essere corretto, almeno le DLL vengono scaricate. Anche Microsoft è una scopa, si possono trasferire facilmente i dati da C++ a C#, ma il contrario è un grosso problema.
 

Sono su un 64 win 8.

L'ho compilato con vs2013.

Tuttavia, viene caricato, ma c'è una chiamata di funzione di importazione non risolta.

Come posso risolvere questo problema?

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) chiamata di funzione di importazione non risolta

2014.03.05 20:39:59.220 UnmanagedExportsDLLExample1 (XAUUSD,H1) Impossibile trovare '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)

Ciao,

Sto ricevendo errori simili. Come hai risolto?...

2014.03.28 22:16:41.199 2014.03.25 23:59 chiamata di funzione di importazione non risolta

2014.03.28 22:16:41.199 2014.03.25 23:59 Impossibile trovare 'Set2DArray' in 'Testme.dll'

 
ANG3110:
Per quanto ho capito il modello RGiesecke UnmanagedExportLibrary...

Questo messaggio è stato lasciato più di mezzo anno fa. È cambiato qualcosa da allora????

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Qualcuno è riuscito a far funzionare la funzione ReplaceString? Tutte le funzioni fanno il loro lavoro, tranne questa, qualche idea?
 

Metodo 1:

Ho 64 win 7, vs2012 C#. Ho scaricato il file modello testme.zip del proprietario.

Nel mezzo del prompt alcuni errori (percorso sbagliato, file mancanti, ecc. e così via), è stato risolto.

Ma alla fine, appare ancora e e di sopra lo stesso problema. Non so se ora è risolto? Quale metodo per risolvere.



Metodo due:

NuGet installato pacchetto RGiesecke.

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

L'ultima versione del 201311 richiede

Errore 2 C:\Users\Administrator\AppData\Local\Temp\tmp8B24\dllTest.il(58) : errore: errore di sintassi al 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)
 

È possibile utilizzare lo stripper C++ con l'aiuto di IJW, e poi unire tutto in un'unica DLL puramente per mezzo del compilatore - linker, non sono necessarie perversioni con il modello descritto nell'articolo, descritto brevemente qui - http://stackoverflow.com/questions/26226958/include-managed-c-sharp-dll-into-unmanaged-c-dll-all-in-one-single-file.

Beh, e il metodo descritto con il modello RGiesecke - è un hack e tale prima o poi smette di funzionare, io, tra l'altro, anche non ha funzionato ...

Ma se qualcuno vuole ancora giocare con il metodo IL descritto nell'articolo, c'è un'altra moto, ma non funziona nemmeno - 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...
 

Salve,

Qualcuno è riuscito a inviare una struttura con variabili stringa all'interno, alla dll?

Sono riuscito a inviare int, double, float, ma per le variabili stringa ottengo questo errore:

Access violation read to 0x0000007B

Ecco la mia struttura C#:

        [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;
        };

E qui la struttura mql4:

   struct accInfo
   {
      string   broker;
// stringa server;
      int      account;
// stringa utente;
      
      double   balance;
      double   credit;
// stringa di valuta;
      int      leverage;
      int      stopout;
      int      stopoutmode;
      float    commission;
      int      lotsize;
      float    minlot;
      float    lotstep;
      float    maxlot;
      float    gmtOffset;
      
// coppia di stringhe;
      int      digits;
      int      point;
      int      tradeAllowed;
      int      swaptype;
      float    swapbuy;
      float    swapsell;
      int      stoplevel;
   };

Ho provato a marshallare la variabile stringa all'interno della struttura ma MT4 si blocca completamente, nessun errore, si blocca e si blocca in windows.

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

Grazie.

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:

Sì, tra qualche tempo scriveremo un nuovo articolo sull'uso delle DLL. Sono state aggiunte molte cose interessanti.

Nel frattempo, è possibile utilizzare gli esempi dell'articolo in discussione. Non c'è nulla di complicato.

E ... Quanto tempo bisogna aspettare? Un anno, due... o 10?

Sono già passati 3 anni. Secondo l'articolo citato all'inizio non è possibile importare metodi da dll. Dove sono gli esempi?

 

Grazie mille per questo articolo. Ho usato le idee qui per costruire questa libreria MQL opensource per C#.

https://github.com/jseparovic/MQL4CSharp

È ancora in fase di sviluppo e al momento non è stata testata, ma i primi test mostrano che l'idea funziona.

È molto semplice nel modo in cui invia i comandi da C#, utilizzando un thread per l'esecuzione del codice C# e getter/setter per la comunicazione. MQL esegue il polling dei comandi in attesa ogni millisecondo, mentre il codice C# può bloccarsi fino alla scrittura del risultato.

Date un'occhiata a https://github.com/jseparovic/MQL4CSharp/blob/master/MQL4CSharp/UserDefined/Strategy/MaCrossStrategy.cs per un esempio di implementazione di una strategia in C#.

Grazie,

Jason