Jump to content
Tom Next - Daytrading Community

Free Pascal


mtbf40

Recommended Posts

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 :biggrin:

 

Mann o Mann :cleanglasses: weder der Teufel noch PH ist der Blöde!! - sondern ICH - schaut euch mal mein letztes Listing genau an!!

Jetzt funktioniert es!!

Link to comment
Share on other sites

Mann o Mann :cleanglasses: 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 schon

Was könnte denn da das Problem sein?? Kann das mal jemand nachstellen??

Link to comment
Share on other sites

Mann o Mann :cleanglasses: 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 :shocked: Tja, solche trivialen Fehler suchen wir hier nicht. Das ist ja wie: "Mein Fernseher geht nicht." - "Haben Sie den Stecker drin?" :jump:

 

es scheint aber doch noch ein Poblem geben - und zwar auf Win Server 2008 64bit - da funktioniert es nämlich nicht - auf Win7 64bit schon

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

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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.

  • Upvote 1
Link to comment
Share on other sites

so Leute... habe jetzt eine TeamViewer Session mit RAiNWORM hinter mir und jetzt funktioniert es - nochmals vielen Dank :10points:

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!! :Howdy:

 

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

Link to comment
Share on other sites

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 :book:

Link to comment
Share on other sites

  • 3 weeks later...

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 ?? :punishR:

 

mtbf40

meine.zip

Link to comment
Share on other sites

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? :white_flag: (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?

Link to comment
Share on other sites

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 kompliziert

Ausserdem 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 :head:

 

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? :white_flag: (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 :badtaste_:

Habe mir auch tausend andere Beispiele runtergeladen und angeschaut, aber bisher keine Lösung gefunden. :plorar1:

Link to comment
Share on other sites

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

 

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

 

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

Link to comment
Share on other sites

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

 

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

  • 6 months later...

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

Link to comment
Share on other sites

Sendet permanent Daten: Wie?

 

Serializable / unserializable die Daten, dass sollte die Lösung sein bzw. packe alles in

eine Liste / Array / JSON / XML und sende dann.

 

XML / Json zu schreiben auf MT4 Seite ist einfach ... Free Pascal hat sicher Bibliotheken.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...