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

Aktuelle Zeit: Sa Jul 05, 2025 15:51

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



Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: So Mär 08, 2009 18:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
cpp classes can be used in delphi: http://www.pascalgamedevelopment.com/fo ... pic=5652.0 and my class in dll example. No evil there. But maybe i have not yet stretched it to its limits...

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


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

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das mit den Klassen beginnt leider schon bei Pascal selbst. Denn die Klassendefinitionen werden in jedem Binary seperat abgelegt. Sozusagen hat eine DLL eine andere Definition von TObject wie eine Anwendung. Wenn man den Operator IS benutzt, dann wird dieser immer fehl schlagen. Egal ob bei beiden Anwendungen die gleiche Unit benutzt wird. Aufrufen und benutzen kann man die Klassen. Nur sobald man Typen überprüfen möchte kann das ganz schnell häßlich enden. Außer man würde auf Laufzeitbibliotheken zurückgreifen. Aber das ist auch nicht gerade schön.

CPP Klassen in Delphi. Keine Ahnung was der Inhalt des Links ist. Da kann ich hier nicht drauf zugreifen. Aber ich hatte auch schon mal CPP Klassen in Delphi benutzt. Nur diese Methode ging über virtuelle Funktionen und selbst die kleinste Abweichung hat dazu geführt, dass alles inkopatibel wurde. Andersrum Delphi klassen in CPP zu benutzen ist wohl nur schwer möglich. Habe ich aber bisher noch nie so recht versucht.

Alternativ kann man entweder Interfaces benutzen (die wurden genau für so etwas gemacht) oder aber man benutzt das OpenGL "objekt" System. C Funktionen mit einer ID/Pointer. Die ganzen Aufrufe geschehen dann auf einer Seite der Schnittstelle. Aber das gehört meiner Meinung dann auch ein bisschen in ein neues Thema. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 09, 2009 22:11 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
Klassen in DLLs sind kein Problem, solange man die oben von Lossy eX genannten Operatoren nicht verwendet oder versucht auf die RTTI zuzugreifen. Aber sowas wie der Operator "IS" ist ja schnell selbst über eine einfache Funktion implementiert. In Andorra 2D verwende ich Klassen in meiner DLL-Schnittstelle - das hat mir an keiner Stelle irgendwelche Nachteile eingebracht, abgesehen davon, dass die DLL und EXE binärkompatibel (sprich vom selben Kompiler erstellt) sein müssen. Das ist IMHO der einzige Vorteil von Interfaces (unter Windows).

Siehe:
http://andorra.cvs.sourceforge.net/view ... arkup#l_42

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 15, 2009 16:31 
Offline
DGL Member

Registriert: Mo Jun 30, 2008 12:47
Beiträge: 69
Markus hat geschrieben:
Mit Delphi ist es (nicht so einfach) möglich, Variablen aus einer DLL auszulesen, deswegen ist das hier wohl der einfachste Weg.


Ich verstehe gerade nicht, warum es nicht (so einfach) möglich wäre :S

Man könnte es doch einfach mit Messages lösen:
der DLL (welche auch im Mem-Bereich der Exe ist und somit einfach auf dessen Variablen zugegriffen werden kann) schickt man eine Message, die die DLL dazu veranlasst, die Adresse der Variable zurück zu schicken!

MfG

_________________
...GOD is wearing black...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 15, 2009 17:16 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Die DLL kann aber keine Message empfangen, wenn sie nicht ein eigenes Fenster erzeugt. Daher würde man das eher über einen Funktionsaufruf lösen, der den Pointer auf die Variable zurückgibt.

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: Mo Mär 16, 2009 02:15 
Offline
DGL Member

Registriert: So Apr 01, 2007 17:51
Beiträge: 42
Wohnort: Hamm/Westf.
Also ein Progam A benutzt meine X.DLL
Dann kann mein Program B meine X.DLL benutzen um vom Program A einen übergebenen Wert zu übernehmen ?

Geht oder geht nicht ?

Fast sehe ich die Variante am möglichsten , eine Datei als einen Wert Speicher zu benutzen.

lg
Gento


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 16, 2009 10:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Nein. Das Problem ist wieder etwas ganz Anderes. Wenn zwei Programme ein und die selbe DLL benutzten, dann benutzen sie nur die gleiche Codebasis. Allerdings jede Anwendung hat einen eigenen Speicherbereich. Entsprechend auch jede der geladenen DLLs. Mit anderen Worten. Die Variablen die die DLL aus der einen Anwendung hat sind nicht die Gleichen wie die aus der Anderen. Das hat auch einen Sicherheitshintergrund. Sonst könnte jede Anwendung einfach so irgendwelche DLLs öffnen und dann auf Daten anderer Anwendungen zugreifen.

Um solche Daten zu übergeben gibt es interprocess communications. Allerdings kenne ich mich damit nicht gut genug aus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 16, 2009 17:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Für IPC gibt es mehrere möglichkeiten. Einmal gibt es (nur unter Windows) die WM_COPYDATA-Nachricht. Die ist ein Sonderfall, bei der man einen Pointer "verschickt", dessen zugehöriger Speicherbereich dann von Windows in den Speicher des anderen Prozesses gemappt wird. Das ist unter Windows eigentlich die einfachste Methode (vorrausgesetzt, beide Prozesse haben eine Nachrichtenschleife)
Ansonsten gibt es noch Named Pipes, wo eine Anwendung den "Server" aufmacht und eine andere zu dieser Pipe verbindet. Damit habe ich mich aber noch nicht befasst.
Dann kann man noch gewöhnliches Netzwerk über Localhost nehmen. Schnell, einfach und plattformübergreifend möglich. Da ist es nur eine Sache mit den Ports, weil du dich darauf verlassen musst, dass du den Port verwenden kannst.
Die ganz harte Methode ist, den Speicher eines prozesses zum schreiben zu öffnen und dann was reinzupacken - empfehle ich aber eher nicht ;).
Ansonsten bleibt dir nur eine Datei.

Hoffe geholfen zu haben

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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.013s | 17 Queries | GZIP : On ]