PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auf eine DLL mit C zugreifen



dvdjimmy
09-05-2006, 08:48
Hallo zusammen!

Da ich mich zu einem Anfänger in Sachen C zähle bitte ich die folgende Frage zu entschuldigen :)

Ich will mit einem C-programm eine Maschine steuern. Hierzu habe ich vom Maschinenhersteller eine dll bekommen, und eine komplettbeschreibung über die möglichen Funktionen der dll. Diese Dll steuert dann im prinzip die maschine.

Ich sage also in meinem Programm zum beispiel "Fahre zu XYZ" indem ich den Befehl Moveto(XYZ) aus der DLL aufrufe.

Leider habe ich überhaupt keine Ahnung, wie ich eine solche Dll in ein c-programm einbinde bzw. dann funktionen daraus nutzen kann.

Vielen Dank bereits vorab.

Joachim

Joghurt
09-05-2006, 09:54
Das ist doch jetzt eine windowsspezifische Frage; oder meinst du mit DLL eine shared library im .so format?

IIRC, brauchst du noch eine passende .LIB-Datei und natürlich die .H Datei. Du linkst dann praktisch mit der .LIB und das Programm lädt dann zur Laufzeit die DLL

dvdjimmy
09-05-2006, 10:35
Hmm..


leider habe ich nur die dll-datei.

Ist es damit auch schon möglich?

Und ja, es ist nur unter windows, mein Programm meine ich.

Grüße,

Joachim

Joghurt
09-05-2006, 11:42
Noch nicht mal die .h? Dann wird es ziemlich unpraktisch.

Ein .LIB kann man erstellen lassen; u.U. ist sie auch gar nicht mehr nötig heutzutage

dvdjimmy
09-05-2006, 14:46
Hi,

wieso wird es da unpraktisch? ich will die dll auch nur statisch verlinken. Also nicht dynamisch nachladen oder so.

Leider habe ich überhaupt keinen Schimmer wie und wo ich überhaupt anfangen soll. Bei einigen Beispielen habe ich jetzt auch schon etwas von DWORD Geschichten gelesen. Ich dachte, dass es nur Integer, Float, char und double gibt....

Grüße,

dvdjimmy

7.e.Q
09-05-2006, 14:54
Unpraktisch ist das deshalb, weil du deinem Programm keine Informationen über die Funktionalität einer DLL geben kannst, wenn du keine .h Datei dazu hast. Zru Not musst du dir selbst eine schreiben. Geht nur um die Funktionsprototypen zu der DLL.

ps: dies ist ein Linux/Unix Forum... nur so als Anmerkung...

quinte17
09-05-2006, 15:32
indem man aber auch recht oft windows fragen beantwortet bekommt.
qualitativ so gut wie immer besser :P

greetz

Joghurt
09-05-2006, 15:38
ich will die dll auch nur statisch verlinken. Du kannst keine DLL statisch verlinken. Wie der Name schon sagt, ist das eine dynamisch Bibliothek, die immer dynamisch nachgeladen wird. MSVC ist nur so nett, dir den Code automatisch reinzuschreiben, der das macht.

dvdjimmy
10-05-2006, 12:33
Hmm..

was heißt das jetzt für mich. Ich programmiere mit Bloodshed DevC++. Gibt es da auch sowas, dass er mir den Code für die Dll reinschreibt?

Überhaupt, was hat das mit den Prototypen zu tun?

Danke bereits vorab.

Grüße,

dvdjimmy

h1web
10-05-2006, 13:16
Mit LoadLibrary lädst du die DLL und mit GetProcAddress holst du dir
die Addressen zu den Funktionen, aber wie gesagt solltest du dafür
die Funktionsprototypen haben, sonst wird es wirklich unbequem ( reversen ).

dvdjimmy
11-05-2006, 06:48
Hallo,

vielen Dank. Jetzt hats bei mir gefunkt.

So wie ich das sehe, brauche ich die Funktionsprototypen wenn ich ein explizites Binding mache, oder?

Ist ein Funktionsprototyp so etwas wie eine Schablone, welche dem aufrufenden Programm sagt, welche Werte es zu erwarten hat?

Ich habe noch ein wenig gesucht und eine *.h datei gefunden, wo alles mögliche definiert ist aber eben auch typedef struct Strukturen, welche mir sehr stark nach den prototypen aussehen.

Zusätzlich ist es mit dieser *.h datei wohl auch möglich, die dll implizit anzusprechen. Hat das nun irgendeinen Vorteil?

Grüße,

dvdjimmy

h1web
11-05-2006, 13:27
Hallo,

vielen Dank. Jetzt hats bei mir gefunkt.

So wie ich das sehe, brauche ich die Funktionsprototypen wenn ich ein explizites Binding mache, oder?

Ist ein Funktionsprototyp so etwas wie eine Schablone, welche dem aufrufenden Programm sagt, welche Werte es zu erwarten hat?
Genau. Dadurch weiß der Compiler, wie und welche Argumente auf den Stapel geschoben werden sollen.

Ob dir die Header-Datei dir nun großartig hilft, kann ich dir nicht sagen,
weil ich nicht weiß, was drinnen steckt ;)

RHBaum
15-05-2006, 08:45
Bei Dlls vom Fremd-Hersteller ohne statische mitgelieferte Lib (was meistens so ist, weil ne lib/a compilerabhaengig ist), nuetzen Dir die Funktionsprototypen in der .h datei recht wenig. Du baust den Funktionspointer-Typ soweiso haendisch nach ... den kannst nich aus der .h generieren lassen.
Das einzige wo die .h nuetzlich ist, wenn die Parameter selber definierte structuren/enums/defines verwenden, da kannst dir das abtippen durch die .h sparen.
Ansonsten langt ne Doku der Funktionen (und die Hoffnung, das die versionen stimmen und die doku richtig ist ^^)

Ciao ...

Joghurt
15-05-2006, 13:29
Ich glaube mich erinnern zu können, dass die neusten Versionen von MinGW direkt mit den DLLs linken können (man kann sie einfach wie eine .lib übergeben) die entsprechende .a wird dann automatisch intern erzeugt. Früher brauchte man dafür ein Extraprogramm, dessen Namen mir jetzt gerade entfallen ist.

dvdjimmy
22-05-2006, 10:28
So...jetzt bin ich wieder da. Sorry das ich mich so lange nicht gemeldet habe.

Ich sehe schon, es gibt hier zig Lösungen. Die nächste Woche werde ich jetzt einmal ganz konkret ein paar Beispiele programmieren. Ich melde mich dann wieder.

Vielen Dank an alle.

Grüße,

dvdjimmy