RAiNWORM Posted January 17, 2012 Report Posted January 17, 2012 da kommt nix mit "klick mal ok" Dann schreib den String in eine Textdatei anstatt den Messagedialog zu nutzen. Es kann sein, dass der nämlich nicht geht, weil die DLL keine GUI hat. Wenn es dann immer noch nicht klappt, dann stimmt da wohl was nicht Quote
mtbf40 Posted January 17, 2012 Author Report Posted January 17, 2012 Dann schreib den String in eine Textdatei anstatt den Messagedialog zu nutzen. Es kann sein, dass der nämlich nicht geht, weil die DLL keine GUI hat. Wenn es dann immer noch nicht klappt, dann stimmt da wohl was nicht Mann o Mann weder der Teufel noch PH ist der Blöde!! - sondern ICH - schaut euch mal mein letztes Listing genau an!! Jetzt funktioniert es!! Quote
mtbf40 Posted January 17, 2012 Author Report Posted January 17, 2012 Mann o Mann weder der Teufel noch PH ist der Blöde!! - sondern ICH - schaut euch mal mein letztes Listing genau an!! Jetzt funktioniert es!! es scheint aber doch noch ein Poblem geben - und zwar auf Win Server 2008 64bit - da funktioniert es nämlich nicht - auf Win7 64bit schonWas könnte denn da das Problem sein?? Kann das mal jemand nachstellen?? Quote
RAiNWORM Posted January 18, 2012 Report Posted January 18, 2012 Mann o Mann weder der Teufel noch PH ist der Blöde!! - sondern ICH - schaut euch mal mein letztes Listing genau an!! Du rufst die DLL-Funktion ja gar nicht auf Tja, solche trivialen Fehler suchen wir hier nicht. Das ist ja wie: "Mein Fernseher geht nicht." - "Haben Sie den Stecker drin?" es scheint aber doch noch ein Poblem geben - und zwar auf Win Server 2008 64bit - da funktioniert es nämlich nicht - auf Win7 64bit schonWas könnte denn da das Problem sein??Beim #import der DLL gib mal einen festen absoluten Pfad zur DLL an. Ich vermute, es hängt mit UAC zusammen. Quote
mtbf40 Posted January 18, 2012 Author Report Posted January 18, 2012 Beim #import der DLL gib mal einen festen absoluten Pfad zur DLL an. Ich vermute, es hängt mit UAC zusammen. habe ich gemacht aber Fehler:function 'an_dll' call from dll 'meine.dll' critical error der zieht die DLL ja an und hat dann irgend ein Problem!! Wie kann man dieses Problem debuggen? Quote
lutzs Posted January 18, 2012 Report Posted January 18, 2012 Du rufst die DLL-Funktion ja gar nicht auf Tja, solche trivialen Fehler suchen wir hier nicht. Das ist ja wie: "Mein Fernseher geht nicht." - "Haben Sie den Stecker drin?" Ton ist vorhanden, aber kein Bild? Sie sitzen hinter dem Gerät! Lutz Quote
mtbf40 Posted January 18, 2012 Author Report Posted January 18, 2012 Ton ist vorhanden, aber kein Bild? Sie sitzen hinter dem Gerät! Lutz Quote
RAiNWORM Posted January 18, 2012 Report Posted January 18, 2012 habe ich gemacht aber Fehler:function 'an_dll' call from dll 'meine.dll' critical error der zieht die DLL ja an und hat dann irgend ein Problem!! Wie kann man dieses Problem debuggen? Wo steht, dass er die DLL erfolgreich laden konnte? Mit debuggen wird es schwer, außer du nutzt IDA Pro, SyserDebugger oder SoftIce. Damit bekommst du nahezu alles gedebuggt. Aber damit würde ich gar nicht anfangen, außer du beherrschst Assembler im Schlaf und kennst dich bis auf Betriebssystemebene mit Programmprozeduren aus. Bleibt also nur der Klassiker: Logs schreiben. 1 Quote
mtbf40 Posted January 19, 2012 Author Report Posted January 19, 2012 so Leute... habe jetzt eine TeamViewer Session mit RAiNWORM hinter mir und jetzt funktioniert es - nochmals vielen Dank Was wurde jetzt gemacht? - einfach die gesendeten Daten in eine Datei verfrachtet.Das eigentliche Problem ist zwar noch nicht gelöst aber ich bin ziemlich zuversichtlich... denn dank wh's Anregung für einen Testcode bin ich auf die Idee gekommen die exe-Datei mal auf dem Server laufen zu lassen - und siehe da eine Fehlermeldung!! Failed to create win32 control, error: 1407 : Fensterklasse wurde nicht gefunden. Das wird auch der Grund sein, warum die DLL - mit MessageDLG nicht funktioniert - d.h. weiter gehts - was ist bei diesen Fehler zu tun?? Quote
mtbf40 Posted January 20, 2012 Author Report Posted January 20, 2012 Setze mal nur zum Test in deine GUI ein. var buttonSelected : Integer; begin // Show a custom dialog buttonSelected := MessageDlg('Custom dialog',mtCustom, [mbYes,mbAll,mbCancel], 0); // Show the button type selected if buttonSelected = mrYes then ShowMessage('Yes pressed'); if buttonSelected = mrAll then ShowMessage('All pressed'); if buttonSelected = mrCancel then ShowMessage('Cancel pressed'); end; kann mir jemand eine EXE-Datei geben die mit Delphi bzw. C/C++ kompiliert wurden?? - ich möchte mal testen ob die gleichen Probleme auftreten Quote
RAiNWORM Posted January 20, 2012 Report Posted January 20, 2012 kann mir jemand eine EXE-Datei geben die mit Delphi bzw. C/C++ kompiliert wurden??Anbei 2x EXE kompiliert mit Delphi 2010. 1x mit runtime Packages, 1x mit eingebetteten Packages.Tests.zip 1 Quote
mtbf40 Posted February 8, 2012 Author Report Posted February 8, 2012 so - nach langen probieren, testen und verzweifelen ergibt sich folgender Stand: - MT4 lädt und sendet Daten an die DLL- die dll erzeugt ein GUI- es werden aber keine Daten ins Memo geschrieben - erst wenn ich das Fenster schließe (Event Destroy) werden die Daten geschrieben ??? kann mir jemad sagen wieso weshalb warum ?? mtbf40meine.zip Quote
mtbf40 Posted February 15, 2012 Author Report Posted February 15, 2012 wie realisiere ich folgendes Szenario?? : MT4: sendet Daten -> DLL: sendet diese Daten weiter -> zu einer Gui-Applikation z.B. in ein Memo zum Begreifen kann auch ein einfaches Test-Programm dienen hier mal ein Link das man es realisieren kann!! ein funktionierendes Beispiel Quote
Mythos Posted February 16, 2012 Report Posted February 16, 2012 wie realisiere ich folgendes Szenario?? : MT4: sendet Daten -> DLL: sendet diese Daten weiter -> zu einer Gui-Applikation z.B. in ein Memo Muss es eine fixe Sprache sein? Mit Pascal kenn ich mich null aus... Allgemein würden mir 2 Varianten einfallen:mit DLL (programmiertechnisch mMn eher aufwändiger):die DLL ist ein TCP Server zu dem sich die GUI hinverbindet (ggfs. auch umgekehrt, dann könnte man mehrere MTs in eine GUI verbinden lassen).Die GUI kann dann sein wie sie will, bekommt die TCP Packets und fertig. ohne DLL (muss es unbedingt eine DLL sein?):du schreibst die Daten in MT direkt in eine Datei und die GUI öffnet die Datei und fragt sie regelmäßig ab. In welchem Speed müssen die Daten bei der GUI sein? Mit Datenaustausch über Datei sinds vermutlich ein paar ms...(du kannst den Austausch über Datei auch mit eigener DLL machen, is mMn aber ein reiner overhead wennst es selber programmierst) EDIT: hab doch mal in den Code reingeschaut. Du machst es schon über files oder? (wieso genau über eigene DLL?) d.h. Das Problem ist nur das die Daten aus dem file angezeigt werden? Gibts in Pascal sowas wie Konsolenoutput für Debugmessages oder so? Quote
mtbf40 Posted February 16, 2012 Author Report Posted February 16, 2012 Muss es eine fixe Sprache sein? Mit Pascal kenn ich mich null aus...ich möchte mir mal eine OO-Programmiersprache aneignen und da ist C/C++ einfach zu kompliziertAusserdem ist Freepascal Plattform unabhängig und sehr kompatibel zu Delphi und Open Source und relativ schnell zu erlernen - wenn die blöden DLL's mit Gui nicht wären Allgemein würden mir 2 Varianten einfallen:mit DLL (programmiertechnisch mMn eher aufwändiger):die DLL ist ein TCP Server zu dem sich die GUI hinverbindet (ggfs. auch umgekehrt, dann könnte man mehrere MTs in eine GUI verbinden lassen).Die GUI kann dann sein wie sie will, bekommt die TCP Packets und fertig. ohne DLL (muss es unbedingt eine DLL sein?):du schreibst die Daten in MT direkt in eine Datei und die GUI öffnet die Datei und fragt sie regelmäßig ab. In welchem Speed müssen die Daten bei der GUI sein? Mit Datenaustausch über Datei sinds vermutlich ein paar ms...(du kannst den Austausch über Datei auch mit eigener DLL machen, is mMn aber ein reiner overhead wennst es selber programmierst) über eine Datei zu gehen wäre möglich - ich möchte aber die Techniken rund um DLL/Gui/Applikation... verstehen, nutzen und lernen, verstehen, lernen, verstehen... EDIT: hab doch mal in den Code reingeschaut. Du machst es schon über files oder? (wieso genau über eigene DLL?) d.h. Das Problem ist nur das die Daten aus dem file angezeigt werden? Gibts in Pascal sowas wie Konsolenoutput für Debugmessages oder so?Das mit der Datei sind ja alles nur Tests - ich habe bereits eine Version wo die DLL Daten in eine GUI schreibt - allerdings macht die das nur, wenn ich das Fenster schließe, dann werden die Daten in eine Memo geschrieben und schwupp das Fenster ist weg Habe mir auch tausend andere Beispiele runtergeladen und angeschaut, aber bisher keine Lösung gefunden. Quote
Mythos Posted February 16, 2012 Report Posted February 16, 2012 ich möchte mir mal eine OO-Programmiersprache aneignen und da ist C/C++ einfach zu kompliziert Dann vermute ich mal das Java auch nicht unbedingt dein Freund ist oder? Wäre auch Plattformunabhängig und recht einfach in der GUI-Erzeugung (zumindest im Gegensatz zu C), dafür hab ich noch nie gesehen das man mit Java DLLs schreiben könnte... . über eine Datei zu gehen wäre möglich - ich möchte aber die Techniken rund um DLL/Gui/Applikation... verstehen, nutzen und lernen, verstehen, lernen, verstehen... Ich glaub ich hab da was falsch verstanden: Du willst also nicht eine DLL machen die für die Datenübertragung zur einer GUI-Applikation verantwortlich ist, sondern eine DLL, die selber eine GUI macht?Sprich die GUI wird aus dem MT heraus erzeugt und damit "direkt" mit Daten gefüttert... Also wenn du GUI und OO lernen willst, würd ich erstmal eine standalone GUI bauen die alles erfüllt was deine DLL-GUI soll. Die GUI hat dann vermutlich eine init (in C und so die "main") und eine Funktion die sie mit Daten füttert (die kannst im Standalone ja zu testzwecken einfach in zufälligen Abständen aufrufen).Wenn das läuft, packst du es in eine DLL, rufst die 2 Funktionen von MT aus auf und fertig. Ich kenn mich jetzt mit DLLs nit so aus, aber ich wär mir nit sicher wie einwandfrei das alles (vor allem die GUI) direkt aus der DLL heraus läuft. Deswegen würd ichs Schritt für Schritt machen, sonst kämpfst du gegen 3 Windmühlen gleichzeitig. Quote
RAiNWORM Posted February 16, 2012 Report Posted February 16, 2012 Du willst also nicht eine DLL machen die für die Datenübertragung zur einer GUI-Applikation verantwortlich ist, sondern eine DLL, die selber eine GUI macht?Sprich die GUI wird aus dem MT heraus erzeugt und damit "direkt" mit Daten gefüttert...Ich habe es bislang noch nicht geschafft, eine GUI als DLL direkt in MT4 einzubinden. Stattdessen muss die DLL die Kommunikationsschnittstelle zwischen MT4 und der GUI bilden. Das funktioniert dann auf jeden Fall. Der Datenaustausch könnte dann über lokale Speicherbereiche, Files oder TCP/IP erfolgen. Ich hatte mich für TCP/IP entschieden, da ich dann die GUI "sonst wo" hinlegen kann. Quote
mtbf40 Posted February 16, 2012 Author Report Posted February 16, 2012 ich hatte sogar eine Version wo die DLL eine GUI aufgemacht hat!! ABER die Daten wurden nur dann in das Memo geschrieben, wenn ich das Fenster geschlossen habe.Ich habe dann diese Version ad akta gelegt und konzentriere mich jetzt auf die Variante wie oben von euch beschrieben. Ich dachte das wäre einfacher, aber Pusteblume - der (MT4) schreibt seine Daten schön in eine Datei - über meine DLL - in meiner GUI kommt aber nichts an.Ich fische wahrscheinlich mit meiner GUI in einem Gebiet des Speichers wo sich die DLL kaputt lacht - d.h. die spielt mit mir blinde Kuh. @Mythos: Java wäre zwar auch eine Option - habe mich aber jetzt für Freepascal entschieden. Der Nachteil bei Java ist ja, daß dort ein Interpreter gebraucht wir, genauso wie bei C# - hatte ich nämlich auch überlegt. Quote
Mythos Posted February 17, 2012 Report Posted February 17, 2012 ich hatte sogar eine Version wo die DLL eine GUI aufgemacht hat!! ABER die Daten wurden nur dann in das Memo geschrieben, wenn ich das Fenster geschlossen habe.Is jetzt ein Schuss ins Blaue, aber wird die GUI von der DLL "neu gezeichnet"? Ich hatte schon so Probleme, das die Daten und alles im Hintergrund theoretisch da waren, aber niemand der Oberfläche gesagt hat, das sie die Anzeige aktualisieren sollte. Normalerweise wird sie ja nur neu gezeichnet wenn es "notwendig" ist. Ich könnte mir vorstellen das beim schließen des Fensters ein solcher repaint automatisch passiert, bei deinem eigenen Memo aber nicht. Schonmal versucht die GUI bewegen (also das Fenster mit der Maus) oder Größe ändern? Das forciert normalerweise auch einen repaint. Ich fische wahrscheinlich mit meiner GUI in einem Gebiet des Speichers wo sich die DLL kaputt lacht - d.h. die spielt mit mir blinde Kuh. Naja, wenn du die Infos über eine Datei machst, ist der Speicherbereich ja vorgegeben. Kann es sein das tu die Datei beim lesen nicht neu öffnest/aktualisierst? und er deswegen nur die leere Datei sieht?Hat es schonmal geklappt Inhalte aus einer Datei zu lesen? (Also wenn der Code von dir reicht um in Pascal eine GUI zu erstellen, ist es wirklich ziemlich einfach ;) @Java: Inwiefern ist das ein Hinderniss? Java hast du auf deinem PC sicher installiert. Wie gesagt DLL wird schwer, aber die klingt ja schon fertig ;) Quote
mtbf40 Posted February 17, 2012 Author Report Posted February 17, 2012 Is jetzt ein Schuss ins Blaue, aber wird die GUI von der DLL "neu gezeichnet"? Ich hatte schon so Probleme, das die Daten und alles im Hintergrund theoretisch da waren, aber niemand der Oberfläche gesagt hat, das sie die Anzeige aktualisieren sollte. Normalerweise wird sie ja nur neu gezeichnet wenn es "notwendig" ist. Ich könnte mir vorstellen das beim schließen des Fensters ein solcher repaint automatisch passiert, bei deinem eigenen Memo aber nicht. Schonmal versucht die GUI bewegen (also das Fenster mit der Maus) oder Größe ändern? Das forciert normalerweise auch einen repaint. Naja, wenn du die Infos über eine Datei machst, ist der Speicherbereich ja vorgegeben. Kann es sein das tu die Datei beim lesen nicht neu öffnest/aktualisierst? und er deswegen nur die leere Datei sieht?Hat es schonmal geklappt Inhalte aus einer Datei zu lesen? (Also wenn der Code von dir reicht um in Pascal eine GUI zu erstellen, ist es wirklich ziemlich einfach ;) das Schreiben der Datei ist nur die Kontrolle das die Daten auch ankommen - ich lese die Datei nicht wieder ein - die Daten sollen direkt an die GUI gesendet werden @Java: Inwiefern ist das ein Hinderniss? Java hast du auf deinem PC sicher installiert. Wie gesagt DLL wird schwer, aber die klingt ja schon fertig ;) ich konzentriere mich jetzt nur noch auf FreePascal - ich habe von beiden bisher keine Ahnung und von daher ist es egal Ich habe noch einmal 1 Beispiel angehangen...meine1.zip Quote
Mythos Posted February 17, 2012 Report Posted February 17, 2012 das Schreiben der Datei ist nur die Kontrolle das die Daten auch ankommen - ich lese die Datei nicht wieder ein - die Daten sollen direkt an die GUI gesendet werden Ok, irgendwas versteh ich nicht. Was machst du derzeit? Ich hab gedacht die Version wo die GUI direkt von der DLL erzeugt wird, ist nicht mehr aktuell...Wie passiert bei dir derzeit die Datenübertragung von DLL zu GUI? Weil wenn die GUI nicht direkt von der DLL erzeugt wird, is es ja eine eigene Applikation. Quote
mtbf40 Posted August 23, 2012 Author Report Posted August 23, 2012 Hallo, habe bei meinem Projekt jetzt festgestellt das Daten "verloren" gehen.Das ganze realisiere ich über die Indy-Komponenten - TCP-Sockets Das ganze stellt sich folgendermaßen dar: Metarader (EA) sendet "permanent" Daten an eine <--------> DLL (TCP-Server) <--------> DLL gibt die Daten an das Hauptprogramm-<HP> (TCP-Cient)beim HP kommen aber am Anfang nicht alle Daten an, sondern erst nach "kurzer" Zeit - da das HP diese Daten schon verarbeitet, kommt ein Fehler.Jetzt würde ich gern in der DLL ein Debugging einrichten, weiß aber nicht wie - ich habe die Unit IdLogDebug eingebunden die aber nichts ausgibt.Hat jemand ein Beispiel wie man diese Unit richtig einbindet? - oder was gibt es noch für Möglichkeiten eine DLL zu debuggen?? Die Basis dafür ist MTEC von RAiNWORM Quote
wh Posted August 23, 2012 Report Posted August 23, 2012 Sendet permanent Daten: Wie? Serializable / unserializable die Daten, dass sollte die Lösung sein bzw. packe alles ineine Liste / Array / JSON / XML und sende dann. XML / Json zu schreiben auf MT4 Seite ist einfach ... Free Pascal hat sicher Bibliotheken. Quote
wh Posted August 23, 2012 Report Posted August 23, 2012 Schaue mal hier: http://articles.mql4.com/730 Ggfs. einen XML Parser kann man auch auf Seite MT4 "hard coden" (mit Mt4 - würde ich nicht machen, dann doch in C) undFree Pascal hat Libs ... Quote
wh Posted August 23, 2012 Report Posted August 23, 2012 Einen habe ich noch http://codebase.mql4.com/5040 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.