Jump to content


Photo
- - - - -

Free Pascal


Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.

  • Please log in to reply
59 replies to this topic

#21 RAiNWORM

RAiNWORM

    Floor Broker

  • Developer
  • 909 posts
  • 6489 thanks
  • Wohnsitz:NRW

Posted 17 January 2012 - 07:14 AM

wenn mal alles auf Anhieb klappen würde - jetzt findet das :badtaste_:-Programm (Lazarus) den Identifier <MessageDlg> nicht :head:

In Delphi müsste man dazu die Unit Dialogs in die uses oben aufnehmen. Die Funktion sollte einfach den übergebenen String in einer Messagebox ausgeben. Kannst du nach Belieben ersetzen.
  • 0
Wer in die Fußstapfen eines anderen Tritt, wird niemals überholen...

Thanked by 4 Members:
Der Wolf , Bull68 , ronner , Vola

#22 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 17 January 2012 - 03:14 PM

Dann bastel mal hier mit.

MT4:

#import "meine.dll"    void an_dll(string cc); //<----- 1. Änderung statt send <-> cc#import//+------------------------------------------------------------------+//| expert start function                                            |//+------------------------------------------------------------------+int start()  {   string strSend;   strSend = Symbol()+";"+Bid+";"+Ask+";"+TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS);    an_dll(strSend);   return(0);  }//+------------------------------------------------------------------+

Delphi (ich hoffe, es passt auch für FreePascal)
uses  ...type  Tbytes = array [0..200] of byte;procedure an_dll(cc : Tbytes); stdcall;var strText : String;    ii : integer;begin  strText := '';  for ii := 0 to 200 do  begin    strText := strText + chr(cc[ii]);    if cc[ii] = 00 then break;  end;      try    MessageDlg(strText, mtWarning, [mbOK], 0);  except on e : exception do    begin      MessageDlg(e.Message, mtError, [mbOK], 0);    end;  end;end;exports  an_dll; begin ;end.

Das wäre ein Beispiel für call by value mit statischer Speicherreservierung für die Übergabe und simpler Umsetzung. Ist übrigens auch ein schönes Beispiel, wie Exploits entstehen können (Übergabe von mehr als 200 Byte und dadurch Überschreiben des Speichers mit Malware-Code).


so!!! habe jetzt alles zum laufen bekommen :palomitas: - dll kompiliert mt4-Skript erstellt und PENG Error in MT4

function 'an_dll' call from dll 'meine.dll' critical error - bekommst Du auch diesen Fehler??

habe im mt4-Skript eine Änderung gemacht: siehe oben - Variable send mit cc ersetzt - muss nicht der gleiche Name für die Variable im mt4-Skript und in der dll existieren?
  • 0

Thanked by 4 Members:
RAiNWORM , ronner , Vola , Der Wolf

#23 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 17 January 2012 - 04:33 PM

update: die dll hat es sich anders überlegt und produziert nun keinen Fehler mehr!! warum auch immer...

ABER: es popt kein Message-Dialog auf :plorar1:... bin weiter am ausprobieren :schimpf:
  • 0

Thanked by 4 Members:
RAiNWORM , Vola , ronner , Der Wolf

#24 wh

wh

    Floor Broker

  • *_skilled
  • 555 posts
  • 3767 thanks
  • Wohnsitz:Neubrandenburg

Posted 17 January 2012 - 04:55 PM

update: die dll hat es sich anders überlegt und produziert nun keinen Fehler mehr!! warum auch immer...

ABER: es popt kein Message-Dialog auf :plorar1:... bin weiter am ausprobieren :schimpf:



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;

  • 0
Causality is the relationship between an event (the cause) and a second event (the effect), where the second event is a consequence of the first.

Thanked by 4 Members:
Der Wolf , RAiNWORM , Vola , ronner

#25 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 17 January 2012 - 09:45 PM

die Messages funktionieren - was ich jetzt festgestellt habe ist, das mt4-Skript ruft die Funktion aus der DLL überhaupt nicht auf - ich :burn:

//#include <common_functions.mqh>#import "meine.dll"    void an_dll(string cc);#import//+------------------------------------------------------------------+//| expert start function                                        	|//+------------------------------------------------------------------+int start()  {   string strSend;   strSend = Symbol()+";"+Bid+";"+Ask+";"+TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS);    //log("StrSend_"+strSend);   return(0);  }

dazu habe ich die Bestätigung eingeschaltet das ich DLL-Aufrufe betätigen muß - und da kommt nix mit "klick mal ok" :argg:

entweder steckt da der Teufel dahinter oder PH!!
  • 0

Thanked by 4 Members:
Vola , Der Wolf , RAiNWORM , ronner

#26 RAiNWORM

RAiNWORM

    Floor Broker

  • Developer
  • 909 posts
  • 6489 thanks
  • Wohnsitz:NRW

Posted 17 January 2012 - 10:05 PM

da kommt nix mit "klick mal ok" :argg:

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:
  • 0
Wer in die Fußstapfen eines anderen Tritt, wird niemals überholen...

Thanked by 3 Members:
ronner , Vola , Der Wolf

#27 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 17 January 2012 - 10:17 PM

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!!
  • 0

Thanked by 4 Members:
Der Wolf , ronner , RAiNWORM , Vola

#28 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 17 January 2012 - 11:03 PM

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

Thanked by 5 Members:
Der Wolf , ajkonly , ronner , RAiNWORM , Vola

#29 RAiNWORM

RAiNWORM

    Floor Broker

  • Developer
  • 909 posts
  • 6489 thanks
  • Wohnsitz:NRW

Posted 18 January 2012 - 07:41 AM

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.
  • 0
Wer in die Fußstapfen eines anderen Tritt, wird niemals überholen...

Thanked by 6 Members:
Der Wolf , ajkonly , WOGO , Bull68 , ronner , Vola

#30 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 18 January 2012 - 12:27 PM

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

Thanked by 5 Members:
Der Wolf , ajkonly , RAiNWORM , Vola , ronner

#31 lutzs

lutzs

    Floor Broker

  • Developer
  • 939 posts
  • 5550 thanks

Posted 18 January 2012 - 01:11 PM

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:


Ton ist vorhanden, aber kein Bild? Sie sitzen hinter dem Gerät! :mocking_mini:

Lutz
  • 0

Thanked by 6 Members:
Der Wolf , ajkonly , RAiNWORM , ronner , Bull68 , Vola

#32 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 18 January 2012 - 03:30 PM

Ton ist vorhanden, aber kein Bild? Sie sitzen hinter dem Gerät! :mocking_mini:

Lutz

:blackjack:
  • 0

Thanked by 5 Members:
Der Wolf , ajkonly , RAiNWORM , ronner , Vola

#33 RAiNWORM

RAiNWORM

    Floor Broker

  • Developer
  • 909 posts
  • 6489 thanks
  • Wohnsitz:NRW

Posted 18 January 2012 - 07:52 PM

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
Wer in die Fußstapfen eines anderen Tritt, wird niemals überholen...

Thanked by 6 Members:
Der Wolf , ajkonly , Bull68 , ronner , WOGO , Vola

#34 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 19 January 2012 - 09:47 PM

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

Thanked by 6 Members:
RAiNWORM , Der Wolf , Vola , ronner , ajkonly , WOGO

#35 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 20 January 2012 - 05:34 PM

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:
  • 0

Thanked by 4 Members:
Der Wolf , RAiNWORM , ronner , Vola

#36 RAiNWORM

RAiNWORM

    Floor Broker

  • Developer
  • 909 posts
  • 6489 thanks
  • Wohnsitz:NRW

Posted 20 January 2012 - 07:20 PM

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.

Attached Files


  • 1
Wer in die Fußstapfen eines anderen Tritt, wird niemals überholen...

Thanked by 2 Members:
Der Wolf , Vola

#37 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 08 February 2012 - 09:16 AM

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

Attached Files


  • 0

Thanked by 3 Members:
RAiNWORM , Der Wolf , Vola

#38 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 15 February 2012 - 10:34 PM

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!! :sosry: ein funktionierendes Beispiel
  • 0

Thanked by 4 Members:
RAiNWORM , Der Wolf , ronner , Vola

#39 Mythos

Mythos

    TEFEx CEO

  • Moderatoren
  • 3,478 posts
  • 16699 thanks

Posted 16 February 2012 - 07:39 AM

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

Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid.

Einstein


Es ist nicht deine Schuld, das die Welt ist wie sie ist. Es wär nur deine Schuld wenn sie so bleibt.


Thanked by 4 Members:
RAiNWORM , Der Wolf , ronner , Vola

#40 mtbf40

mtbf40

    Floor Broker

  • Addict
  • PipPipPipPipPipPip
  • 256 posts
  • 1493 thanks
  • Wohnsitz:LE

Posted 16 February 2012 - 09:22 PM

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:
  • 0

Thanked by 4 Members:
Der Wolf , RAiNWORM , ronner , Vola

Wichtiger Hinweis für Besucher der Community!

Das Erstellungsdatum des von Dir aufgerufenen Themas liegt bereits einige Zeit zurück. Wir möchten darauf hinweisen, den Inhalt der Diskussion auf seine Aktualität hin zu prüfen. Weitere Informationen findest Du auf dieser Seite.


0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users