|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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. Geändert von Racki (20.12.11 um 11:47 Uhr) Grund: .def Datei |
|
|||
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; } } } Dann die Datei CSharpDLL.def erstellt mit folgenden Inhalt: Code:
LIBRARY CSharpDLL EXPORTS DLLTest In experts/include habe ich die Datei CSharpDLL.mqh erstellt mit folgenden Inhalt: Code:
#import "CSharpDLL.dll" int DLLTest(); 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); } 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? |
|
|||
Hallo,
hast Du den Fehler finden können und wenn ja, wie war die Lösung? traderdoc |
|
|||
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. |
|
|||
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 |
|
|||
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. |
Lesezeichen |
Stichworte |
c dll, c# dll, dll, dll einbinden, dll mql4, dll verwenden, ea dll, expert-advisor dll, mql4, programmierung |
|
|