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

Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Grazie, articolo utile!!! Rispetto!
Come passare una stringa a C# da MT, non ho trovato una cosa del genere nell'articolo. Per favore, spiegami.
Grazie, articolo utile!!! Rispetto!
Come passare una stringa a C# da MT, non ho trovato una cosa del genere nell'articolo. Per favore spiegami.
È stato pubblicato il nuovo articolo Esporre il codice C# a MQL5 utilizzando le esportazioni non gestite:
Autore: investeo
Ciao investeo, ottimo articolo!
Ho trovato questo articolo cercando come collegare la DLL C# al codice mql5... e questo mi ha aiutato molto! Grazie.
Ora, ho bisogno di ottenere dati da una DLL che esegue una connessione WebSocket con un server di terze parti, e ho bisogno di inviare i dati live che provengono dal server a MQL5, ma non ho trovato alcun esempio di implementazione di comunicazione in tempo reale e a 2 vie tra MQL5 e una DLL o API.
Potete aiutarmi?
Errore 2 C:\Users\Administrator\AppData\Local\Temp\tmp8B24\dllTest.il(58) : error: syntax error at token '{ ' in: { dllTest
Questo errore si verifica nei sistemi cinesi perché UnmanageExports non funziona correttamente perché alcuni commenti vengono generati in cinese quando UnmanageExports genera il file IL. Questo problema non si verifica sui sistemi operativi giapponesi e inglesi; c'è una soluzione, si può cambiare il sistema operativo con uno inglese.
Ma questo sarebbe un problema troppo grande, quindi è necessario estrarre la piccola volpe per risolvere il problema!
Scaricate il fix per le Esportazioni non gestite fornito da Little Fox al seguente indirizzo
https://www.noisyfox.cn/397.html
http://www.magecorn.com/p/280.shtml .
Per maggiori dettagli, leggete i due articoli sopra citati.
Il proprietario del codice di cui sopra come non è stato in grado di eseguirlo?
2017.04.28 23:48:08.774 Impossibile trovare 'Add' in 'Testme.dll'.
Attivate "Mostra tutti i tipi di file" nel navigatore dell'editor, prendete la vostra DLL con il mouse e gettatela nella finestra MQL5 del programma.
Probabilmente il risultato vi sorprenderà.
Buon pomeriggio. Sono 2018....
Sapete dirmi dove posso vedere esempi di chiamata di funzioni esportate scritte in Net?
È 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 descritto nell'articolo, c'è un altro moto, anche se, anche non funziona - https://github.com/winch/winch.pinkbile.com-c-sharp/tree/master/dll_tool/dll_tool.
Buon pomeriggio. Potresti scrivere un esempio di test passo-passo per costruire c++/c++CLI/c# in un file? Gli stessi semplici esempi dell'autore dell'articolo.
Si prega di fornire un semplice esempio di una funzione scritta in C# per accedervi da mt4(o mt5) ........... Passare i valori a e b a una funzione con Sharp e restituire il risultato a mt4(mt5)
nell'articolo https://www.mql5.com/it/articles/249 la dll compilata dell'autore funziona correttamente in mt4 e mt5!
ma quando provo a creare la mia dll compilata dai sorgenti dell'autore (in VisualStudio 2010) questa dll non funziona (scrive l'errore 127)
tutte le versioni .NET sono installate.
// код C#
using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
namespace TEST
{
class TEST
{
[DllExport("Add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
}
namespace RGiesecke.DllExport
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
partial class DllExportAttribute : Attribute
{
public DllExportAttribute()
{
}
public DllExportAttribute(string exportName)
: this(exportName, CallingConvention.StdCall)
{
}
public DllExportAttribute(string exportName, CallingConvention callingConvention)
{
ExportName = exportName;
CallingConvention = callingConvention;
}
public CallingConvention CallingConvention { get; set; }
public string ExportName { get; set; }
}
}
// код МТ4
//+------------------------------------------------------------------+
#import "TEST.dll"
int Add(int a,int b);
#import
void start()
{
Comment(Add(3,2));
}
//+------------------------------------------------------------------+
Ho passato tre giorni e tre notti a cercare su Google e a fare esperimenti, in generale l'esempio funziona in VS2017, sono riuscito a compilare ed eseguire la .dll sotto MT4, ma ..... sotto Win10 in russo non sono riuscito a eseguirlo.
Ho fatto quanto segue: ho installato una macchina virtuale con Win7 - 64, ma in inglese, ho installato la versione inglese di VS2017, ho installato solo il pacchetto per C#, ho copiato il modello da RGiesecke alla cartella con i modelli VS2017. Durante la compilazione del progetto, non dimenticate di controllare la piattaforma - necessariamente x86 (per MT4). Durante la prima compilazione ho avuto un errore di assenza di namespace RGiesecke, ho installato il pacchetto UnmanagedExportsdal progetto. Tutto è stato compilato con un errore - ildasm.exe non trovato, ma la .dll funziona senza problemi sotto MT4.
Il problema è probabilmente nel modello di RGiesecke, funziona correttamente nella versione inglese di Win, nella versione inglese di VS2017 e tutti i percorsi in VS2017 dovrebbero essere impostati per impostazione predefinita.
Ecco come funziona ;)
Questo approccio funziona con la versione 5 di .NET?
Non l'ho testato, ma dubito che possa funzionare.
MT4 è molto difficile da interagire con C# - ci sono sempre delle insidie.
È più facile passare a MT5.
ma se volete usare MT4 in linea di principio, allora come opzione - lanciate .dll in C# secondo la metodologia dell'articolo, e in essa lanciate qualsiasi codice C# in un thread separato e organizzate lo scambio, ho lanciato librerie C# a 64 bit in questo modo