![]() |
C-Programm in Delphi einbinden
Hallo!
Ich waere sehr dankbar fuer jede Information, die ich zu meiner Frage erhalten kann! Hintergrund: Ich verwende einen Eyetracker um zu bestimmen welchen Bildschirmteil eine Testperson zu einem bestimmten Zeitpunkt anschaut. Dieser Eyetracker sendet alle paar Millisekunden ein paar Integer Zahlen ueber ein Netzwerk an meinen PC. Diese Werte werden von einem C-Programm aufgefangen und in ein textfile geschrieben. Ich moechte diese Werte real-time (also moeglichst ohne Zeitverscheibung) wieder verwenden in einem Delphi-Programm. Eigentlich koennte ich einfach das textfile mit meinem Delphi Programm in regelmaessigem Abstand auslesen (ca. alle 20ms) und die Werte dann in Variablen setzen. Ich suche aber nach einem Weg um den Umweg ueber das textfile zu umgehen. Das C-Programm habe ich nicht geschrieben und ich verstehe auch kein C. Ich kann das Programm auch nicht in Delphi nachbauen, dazu reicht meine Kenntnis nicht aus. Es ist allerdings schon moeglich das C-Programm anzupassen (ein Kollege kann mir dabei helfen). Frage: Ist es moeglich, das C-Programm irgendwie in mein Delphi-Programm einzubinden, sodass die Werte, die das C-Prog auffaengt direkt in Delphi Variablen geschrieben werden mit denen ich weiterarbeiten kann? Oder gibt es einen anderen Weg um das schreiben und lesen des textfiles zu umgehen? Mehr Infos? Einfach nachfragen! Schonmal vielen Dank! Viele Gruesse, Pats |
Re: C-Programm in Delphi einbinden
Wenn dein Kollete die Quelltexte hat könnte er das C-Programm in eine DLL wandeln/packen und diese DLl bindest du dann in dein Delphiprogramm ein. Die DLL muss dann einfach nur Callbackfunktionen aufrufen. Eine andere Möglichkeit wäre dass, das C-Programm deinem Programm eine Nachricht schickt (mit SendMessage/PostMessage). Wenn du die Latenz so gering wie möglich halten willst ist es jedoch das beste das C-Programm als DLL umzusetzen.
|
Re: C-Programm in Delphi einbinden
Herzlich willkommen in der Delphi-PRAXiS, pats.
Mein erster Ansatzpunkt wäre die technische Dokumentation zu dem EyeTracker. Vermutlich lässt sich mit Hilfe eines developer kits zu diesem Produkt recht schnell eine Schnittstelle zu Delphi realisieren. Hast du Zugriff auf entsprechende Informationen oder kannst du die genaue Produktbezeichnung geben? Vielleicht weiß dann schon jemand mehr. Zu dem C-Programm wäre interessant zu wissen, ob du die Quellen dazu besitzt. Deiner BEschreibung nach zu urteilen handelt es sich um ein Demo-Programm. Freundliche Grüße vom marabu |
Re: C-Programm in Delphi einbinden
Hallo,
vielen Dank fuer die Antworten. Ja, ich habe Zugang zum Quelltext des C-Programms, mein Kollege hat es geschrieben. Ich habe auch Zugang zur technischen Dokumentation des Eyetrackers (soweit diese noch vorhanden war, das Equipment ist ueber 10 Jahre alt). Es hat uns ca. 2 bis 3 Wochen gekostet, bis wir mit Hilfe des C-Progs die Daten ueber ein Netzwerk empfangen konnten. Da ich selbst nur Hobby Programmierer bin, war dieses Netzwerkproblem eine grosse Aufgabe (es handelt sich hier auch noch um ein Netzwerk zwischen einem Mac und zwei PCs). Mein Kollege, der das C-Prog geschrieben hat, versteht mehr von Netzwerken, aber leider kein Delphi und ich verstehe kein C - daher das Problem mit den beiden Programmiersprachen. Ich wuerde gerne mit dem C-Programm weiterarbeiten, einfach, weil es ziemlich schwierig war es so hinzukriegen und jetzt gerade endlich funktioniert. Der Vorschlag, eine dll-datei zu verwenden erscheint mir daher sinnvoll. Eine dll zu erstellen ist kein Problem (sagt mein Kollege). Ich hab mich gerade mal schlau gemacht, was eine dll ist. Jetzt die Frage, wie binde ich eine dll in Delphi ein? Wuerdet ihr mir darueber ein paar Detailinfos verraten? Vielen Dank schonmal! |
Re: C-Programm in Delphi einbinden
Eigentlich ganz einfach, wenn man auf ein paar Unterschiede zwischen C und Delphi achtet.
Grundsätzlich: ![]() ![]() ![]() C/Delphi: Struct = packed record, strings übermitteln - schweirig, immer mit Aufrufkonvention stdcall arbeiten. Du solltest mit diesen Infos auch im Forum einiges finden können. |
Re: C-Programm in Delphi einbinden
Ist es nicht möglich in delphi *.obj Dateien einzubinden ? Damit sollte auch möglich sein ?!
|
Re: C-Programm in Delphi einbinden
Zitat:
|
Re: C-Programm in Delphi einbinden
anstelle von Loadmodule würde ich LoadLibrary nehmen. Und ein gutes DLL-Tutorial gibts hier:
![]() |
Re: C-Programm in Delphi einbinden
Wenn ich das ganze richtig verstanden habe, schickt doch Dein C-Programm Daten an einen Rechner im Netzwerk. Wenn das der Fall ist, warum schreibst Du nicht ein Delphi-Programm, welches Deine Daten empfangen kann. Dann kannst die Daten, die Du empfängst direkt weiterverarbeiten.
|
Re: C-Programm in Delphi einbinden
Vielen, vielen Dank!!! Problem geloest!!!
Ich habe jetzt das Programm zum Auffangen der Daten ebenfalls in Delphi nachgeschrieben. Das erschien mir zuerst zuviel Aufwand, aber mit dem Wissen, wie das Prog aussehen muss, war es ziemlich einfach es in eine andere Sprache zu uebersetzen. Und wieder was ueber TCP Verbindungen in Delphi gelernt, was will man mehr... :) Nochmal Danke an alle und bis zum naechsten Mal! Pats |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz