Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 05, 2025 22:38

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Ausgaben / Anzeige in Dll
BeitragVerfasst: Mo Mär 02, 2009 18:36 
Offline
DGL Member

Registriert: So Apr 01, 2007 17:51
Beiträge: 42
Wohnort: Hamm/Westf.
Also, ich möchte ein kleines Fenster sehen , was anzeigt wie oft die Function aufgerufen wurde.
Im Netz finde ich nichts , oder benutze nicht die richtigen Suchbegriffe.

lg Gento

p.s. Soll mit XP & D7 laufen.
Konsolenanwendung würde auch reichen

Code:
  1. library Beispiel;
  2.  
  3. Var Aufgerufen:Word;
  4.  
  5. function AddNumbers(a, b: Double): Double; cdecl;
  6. begin
  7.   Result := a + b;
  8.   Inc(Aufgerufen);
  9.  
  10. end;
  11.  
  12. // Exportieren der Funktion
  13. exports
  14.   AddNumbers;
  15.  
  16. begin
  17.  Aufgerufen:=0;
  18. end.
  19.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 02, 2009 18:41 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Anscheindend hast du es hinbekommen, die Function AddNumbers() aus einem Programm aufzurufen. Das einzige, was du dann noch tun musst, ist folgendes:

- schreib in deiner DLL eine Funktion, die nichts anderes macht, als "Aufgerufen" zurückgibt
- rufe diese Funktion aus deinem Programm auf

Mit Delphi ist es (nicht so einfach) möglich, Variablen aus einer DLL auszulesen, deswegen ist das hier wohl der einfachste Weg.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 02, 2009 18:46 
Offline
DGL Member

Registriert: So Apr 01, 2007 17:51
Beiträge: 42
Wohnort: Hamm/Westf.
Ich möchte in meiner Beispiel.dll die Ausgabe der Wertes auf den Monitor übernehmen.

Gento


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 02, 2009 20:26 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Achso, ich dachte, weil du KonsolenANWENDUNG geschrieben hattest, wolltest du es aus einem Programm aufrufen.

Was spricht denn gegen ein simples

Code:
  1. MessageBox(0, PChar(IntTostr(Aufgerufen)), 'Funktionsaufrufe', 0);


Dazu müsstest du nur die Windows.pas in die Includes reinmachen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 02, 2009 20:34 
Offline
DGL Member

Registriert: So Apr 01, 2007 17:51
Beiträge: 42
Wohnort: Hamm/Westf.
Ich hatte vorher Showmessage drin.

Nur 20 x je Sekunde O.K.drücken nervt schon :roll:

Gento


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 03, 2009 09:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Schau dir eventuell auch mal die Methode OutputDebugString an. Dieser Methode wird ein Text übergeben und der kann von anderen Programmen empfangen werden. Unter anderem vom Delphi (im Eventlog) und von einem Tool von SysInterals. DebugView oder so heißt das. Dadurch verändert sich zu mindest das Verhalten deiner DLL nicht. Allerdings zu häufig sollte man so etwas aber auch nicht aufrufen. Denn sonst wirds natürlich langsamer.

PS: OutputDebugString befindet sich im übrigen auch in der Unit Windows.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mär 05, 2009 22:08 
Offline
DGL Member

Registriert: So Apr 01, 2007 17:51
Beiträge: 42
Wohnort: Hamm/Westf.
Danke für den Tipp.

Aber ich lasse es wohl besser bleiben.

Bei 200 Datensätze a 20K in der Sekunde und auf HDD aufzeichnen kostet das zu viele CPU Takte.

lg gento


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 06, 2009 04:33 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Würde es nicht funktionieren die MessageBox nur bei Tastendruck anzuzeigen?
Also vielleicht mit GetAsyncKeyState in der AddNumbers testen ob die Taste gedrückt wurde.
Eine andere Möglichkeit wäre vielleicht ein Keyboard-Hook.
Und ein Formular aus einer DLL heraus erzeugen, was dann permanent sichtbar ist in irgendeiner Ecke, könnte man vielleicht auch versuchen. Keine Ahnung ob das geht, hab's nie versucht und ist jetzt nur so eine Idee. Ansonsten könnte man den Wert per Message an ein anderes Programm senden, was nur für die Anzeige da ist, wenn das eine Option ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 06, 2009 15:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hast du schonmal über Events bzw Callbacks nachgedacht, die du an die DLL übergibst, sodass sie die dann aufrufen kann um der Anwendung einen Aufruf mitzuteilen? Dann kann die anwendung selber mitzählen bzw den Text eines Labels setzen oder sowas. Ein Beispieltyp für diese Art callback wäre:
Code:
  1.  
  2. type
  3.   TCallback = procedure (Count: Integer) of object;
  4.  

(oder ohne of object, wenn du keine Prozedur eines Objektes ( = Methode) sondern eine unabhängige übergeben willst)

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 06, 2009 16:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Zu den Callbacks eine Anmerkung. Selbst wenn du Klassen hast, solltest du keine "of object" in einer DLL Schnittstelle benutzen. So etwas sollte in DLLs grundsätzlich mit einem Pointer gelöst werden. Denn Klassen in DLL Schnittstellen sind Böse. Ob diese nun offensichtlich oder versteckt benutzt spielt dabei keine Rolle. Und eine Aufrufkonvention ist auch nicht unwichtig.

Gento: Wobei mich persönlich da auch schon mal interessiert was du damit eigentlich genau vor hast? Also natürlich nur wenn das ganze überhaupt noch Bestand hat. Denn ich für meinen Teil habe den tieferen Sinn dahinter nicht so recht verstanden. Irgendwie ist das eigentliche Problem doch noch etwas mysteriös. Und schließlich gibt es für alles irgendwo eine Lösung. Nur Lösungen kann man nur dann geben wenn man das Problem richtig verstanden hat. Und da schließt sich der Kreis.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 07, 2009 23:00 
Offline
DGL Member

Registriert: Mi Nov 12, 2008 18:27
Beiträge: 134
Also irgendwie ist mir das ganze nen bissi wirr.... ich hätte das ganze ähnlich wie bei ner property gelöst und einfach ne schnittstellenfkt geschrieben (oder habt ihr das alle gesagt und ich es nur nicht gerafft??) die dann die zahl zurückgibt, wenn ich sie brauche ..
mfg grey


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 08, 2009 11:28 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Ja, das wurde schon geschrieben. Nur das ist nicht gewünscht, weil die Ausgabe aus der DLL heraus geschehen soll. Messageboxen scheiden aber auch aus, da sie "nerven".


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 08, 2009 11:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
Lossy eX hat geschrieben:
Denn Klassen in DLL Schnittstellen sind Böse.

Warum? Was ist dagegen? Ich spiele met den idee herum um classes in dll's zu nutzen fur einer modularen aufbau in meiner 3das editor. Meiner hello world class in ein dll functioniert wunderbar.

Zu den frage von Gento: wie Lossy Ex sagte soltest du nach OutputDebugString schauen. (http://www.codeproject.com/KB/winsdk/Ou ... tring.aspx)

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 08, 2009 12:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
@Klassen und DLLs: Weil das genauso endet wie bei Strings. Man kann die DLL dann nurnoch in der Sprache verwenden, in der sie geschrieben wurde, weil die Klassenkonstruktionen von C++ und Pascal beispielsweise komplett unterschiedlich sind. Das ist doch der Grund oder?

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 08, 2009 13:47 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Ja, aber man kann Interfaces benutzen -> 7zip
Wenn man das _dokumentiert_ können es auch andere Leute benutzen, unabhängig von deren Sprache.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.016s | 17 Queries | GZIP : On ]