Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   C#-DLL verwenden (http://www.expert-advisor.com/forum/showthread.php?t=1766)

Racki 20.12.11 11:43

C#-DLL verwenden
 
Hallo,

hat von euch jemand Erfahrung damit, wie man in C# geschriebene DLL-Dateien in MQL4 verwendet?
Als Entwicklungsumgebung verwende ich MS VS 2010 Ultimate.
Wenn ich das MQL4-Projekt im Metaeditor kompiliere, dann geht das reibungslos (DLL wird mit eingebunden).
Verwende ich die EX4 im Terminal, dann erhalte ich den Fehler 127.
Nun habe ich schon einiges versucht, weiß aber so langsam nicht mehr weiter und bin für jede Hilfe dankbar.

Gruß
Racki

Edit:
Mir fällt noch ein, ich habe händisch eine .def hinzugefügt.
VS soll das von Haus aus können, gefunden habe ich dazu allerdings nichts hilfreiches.

Crashbulle 20.12.11 13:12

@ Racki

Im Text des mq4 - EA's muß dein .dll definiert/aufruf enthalten sein. Danach
kannst du ihn zur .ex4 kompilieren.
Deine .dll - Datei mußt du dann noch im MT4/Expert/Libraries Folder kopieren/setzen.
Hast du alles richtig auf einander abgestimmt, müßte der EA nach aufruf im MT4 laufen.

Have fun
Crashbulle

Racki 20.12.11 16:30

Danke dir für deine Antwort,
ich habe folgendes gemacht:

Neue DLL geschrieben in C#

Code:

namespace CSharpDLL
{
    public static class test
    {
        public static int DLLTest() {
            return 123;
        }
    }
}

Die Datei CSharpDLL.dll habe ich in das Verzeichnis experts/libraries kopiert.
Dann die Datei CSharpDLL.def erstellt mit folgenden Inhalt:
Code:

LIBRARY CSharpDLL

EXPORTS DLLTest

Habe ich so aus dem DLLSample übernommen und geändert.

In experts/include habe ich die Datei CSharpDLL.mqh erstellt mit folgenden Inhalt:
Code:

#import "CSharpDLL.dll"

int DLLTest();

Jetzt fehlt noch ein EA um das ganze zu testen.
Neuen EA mit dem Namen DLLTester erstellt, der Kopf der Datei sieht so aus:

Code:

#property copyright ""
#property link ""
#include <CSharpDLL.mqh>

//+------------------------------------------------------------------+
//| expert initialization function                                  |
//+------------------------------------------------------------------+
int dlltestint = 0;
int init()
  {
//----
 dlltestint = DLLTest();
 Print("DLLTest-Rückgabe = " + dlltestint);

//----
  return(0);
  }

Kompilieren geht ohne Fehler, wie gehabt.
Führe ich das ganze im Terminal aus, dann kommt wieder der 127er Fehler.
Es kommt quasi diese Meldung: cannot call function 'DLLTest' from dll 'CSharpDLL.dll' (error 127).

Was macht der Racki nur falsch?

traderdoc 16.03.13 20:46

Hallo,

hast Du den Fehler finden können und wenn ja, wie war die Lösung?

traderdoc

Racki 16.03.13 23:48

Helas, ja du musst dir einen Wrapper in C++ schreiben.
Ich bin einfach hingegangen und hab Visual Studio 6.0 ausgegraben.
Bloß nichts mit .Net, mit Dev Cpp hab ich es nicht hinbekommen was die Geschichte mit den .def-Dateien angeht.
Also ich habe mir letztendlich die Mühe gemacht und die DLL komplett in VS 6.0 geschrieben.

Wenn ich dran denke such ich nächste Woche nach nem Beispiel in meinem alten Projektordner.

traderdoc 17.03.13 00:07

Sorry, was ist ein Wrapper?
Ich habe sogar die Beispieldatei im MT genommen und mittels Visual C++ 2010 Express eine dll erstellt. Rufe ich aus dem EA die Funktion GetIntValue auf, bekommen ich denselben Fehler!
Also irgendwas haut hier überhaupt nicht hin.
Ich bin langsam am Ende meines Lateins

Racki 19.03.13 23:37

Der Wrapper ist die Schnittstelle zwischen deinem MT4 und der C#-DLL.
Bedeutet, der Wrapper (die C++-DLL) nimmt die Anfragen aus MT4 entgegen, gibt diese weiter an die C#-DLL und gibt entsprechend die Antwort der C#-DLL wieder zurück an MT4.

Ich habe grad mal in VS2010 eine solche DLL erstellt, die sich in MT4 verwenden lässt.
Quasi ein neues VC++-Projekt als MFC-DLL angelegt und somit war auch die .def-Datei vorhanden.


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:17 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum