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

 
MetaDriver:

Da un mese sto timidamente suggerendo di creare un wiki-tutorial su mql5, compilato dalla comunità. Questo risolverebbe i problemi del mega-tutorial. Gli autori potrebbero anche essere ricompensati con crediti per articoli particolarmente visitati.

Il motore del wiki è gratuito e disponibile.

// Se Metaquotes non vuole farlo, qualcun altro potrebbe farlo su un sito esterno. Io, per esempio, ci sto pensando.

Per i siti esterni c'è un problema: abbiamo il copyright sul nostro materiale. E quando si crea un wiki esterno, quasi il 100% del testo sarà un copia-incolla del nostro materiale.

Si potrebbe sostenere che i wiki pubblici sono un'utopia. L'idea dei wiki pubblici è stata seppellita nella pratica per molto tempo. Guardate quanto impegno mettiamo nello sviluppo delle nostre comunità e della documentazione. Si tratta di un sacco di soldi e di lavoro quotidiano.

La soluzione al problema sta nella creazione di contenuti gestiti con consegna obbligatoria al terminale di ogni utente. Questo aumenta l'efficienza della familiarizzazione di massa da un trascurabile 0,00x% a un realistico 3-5%.

Aumentiamo il volume e la connettività dei materiali MQL5 su base giornaliera. Il progetto di documentazione(linguaggio MQL5, guida, multilingua) occupa una parte molto importante del nostro lavoro.

 
Renat:

Per i siti esterni c'è un problema: abbiamo il copyright sui nostri materiali. E quando si crea un wiki esterno, quasi il 100% del testo sarà copiato dai nostri materiali.

Si può sostenere che i wiki pubblici siano un'utopia. L'idea dei wiki pubblici è stata seppellita nella pratica per molto tempo. Guardate quanto impegno mettiamo nello sviluppo delle nostre comunità e della documentazione. Si tratta di un sacco di soldi e di lavoro quotidiano.

La soluzione al problema sta nella creazione di contenuti gestiti con consegna obbligatoria al terminale di ogni utente. Questo aumenta l'efficienza della familiarizzazione di massa da un trascurabile 0,00x% a un realistico 3-5%.

Aumentiamo il volume e la connettività dei materiali MQL5 su base giornaliera. Il progetto di documentazione(linguaggio MQL5, guida, multilingua) occupa una parte molto importante del nostro lavoro.

Che ne dite di rilanciare i concorsi nell'ambito del tutorial? Dopo tutto, i nuovi arrivati chiedono un libro di testo.

Facciamo un concorso a più fasi, i partecipanti si registrano, presentano un piano per il libro di testo, il 50% viene eliminato, gli altri vengono pagati 20 dollari ciascuno, passano alla seconda fase, ecc.

Fino alla fine della maratona arriveranno alla fine pochi ma con i lavori migliori. Stabilite dei termini reali di creazione con un semestre, suddividetelo in fasi e tutto si risolverà.

 

È un articolo molto interessante e utile sull'interop generale tra C++ e .NET.

La strategia più semplice da implementare è la "2.4. Classe wrapper C++/Cli", perché è possibile utilizzare le API .NET in C++/cli senza alcun problema, quindi l'unico codice collante è una piccola e semplice classe che contiene "gcroot".

Questo approccio è stato scelto come base per l'implementazione di http://www.nquotes.net, una libreria che consente la programmazione MQL in C#.

Anche se la prima versione supporta solo MQL4, sarà sicuramente portata a MQL5 nelle versioni future.

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...
 

Ottimo articolo, molto, molto utile. Ma...

Ho un piccolo problema con Visual Studio. Se creo un nuovo progetto utilizzando il modello e lo costruisco, VS non ha problemi. Posso quindi salvare il nuovo progetto (compresa la dll costruita) su disco, in una cartella di soluzioni. La dll viene eseguita correttamente. Tuttavia, se rientro nel progetto salvato in VS, si lamenta che il progetto "RGiescke.DllExport.targets" non viene trovato o non è presente sul disco, sebbene il file sia presente.

Credo che sia un problema del file di progetto.....

 

Ottimo tutorial, mi piace.

Grandi ringraziamenti.

[Eliminato]  

Ciao Investeo,

Grazie per questo articolo che è stato molto utile, anche se sembra che io abbia affrontato qualche problema cercando di utilizzare il modello di RGiesecke.

Quando ho creato e costruito una DLL ho usato DLL Export Viewer per controllare i nomi delle funzioni esportate per poterle trovare e chiamare tramite GetProcAddress. Purtroppo la DLL stessa viene caricata correttamente con la funzione LoadLibrary ma GetProcAddress restituisce l'errore 127 - Function not found. Allo stesso tempo DLL Export Viewer mostra che nessuna delle mie funzioni è stata esportata ...

Potresti suggerire cosa può essere sbagliato nel mio codice?

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

E poi nell'applicazione Win 32 Console sto facendo quanto segue:

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

Grazie, Art

 
Renat:

A proposito, MetaTrader 5 è in grado di importare in modo nativo le funzioni dalle DLL scritte in .NET già da diverse versioni.

Abbiamo appositamente aggiunto questo supporto e ora non è più necessario utilizzare soluzioni alternative.

Non ho trovato informazioni su come importare le funzioni .Net. Chi ne è in grado può condividere un link o un semplice esempio.
 
a.p:
Non riesco a trovare informazioni su come rendere la funzione .Net estemporanea. Chi può, per favore condivida un link o un semplice esempio.

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.

Molto probabilmente il risultato vi sorprenderà.

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

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 sarete sorpresi dal risultato.

cool.

Se potessi inserire tutte le funzioni della DLL in una volta sola.

 
Renat:

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 sarete sorpresi dal risultato.

Provato, MetaEditor si blocca

P.S.
Win8 Enterprise 64
MetaEditor build 842
La lib .Net ha una funzione:
public static int Add(int value1, int value2)
{
restituisce valore1 + valore2;
}