DLLs einbinden



  • Hi Leute,

    ich hoffe, dass ich hier richtig bin und das mir hier jemand weiterhelfen kann.

    Also es geht darum, dass ich mit C auf ein paar Funktionen aus ner DLL zugreifen will (speziell die capi2032.dll für ISDN Zeugs).
    Naja jedenfalls hab ichs schon mit der LoadLibrary und GetProcAddress versucht, aber damit geht das nicht so richtig. LoadLibrary gibt ständig NULL zurück, obwohl im Statusfenster vom MS Visual steht, dass die DLL geladen wurde...
    Egal, es gibt ja auch ne LIB Dazu. Die und die DLL hab ich dem Projekt hinzugefügt und auch im Linker eingetragen.

    Aber was jetzt? Muss ich jetzt nochmal eine Headerdatei schreiben und diese ebenfalls hinzufügen? Oder reicht es wenn ich die Funktionen (gibt ja ne Doku dazu) direkt im .c deklarieren? Und gibts da irgendwelche syntaktischen Sachen oder Schlüsselworte die ich beachten muss? Irgendwie muss ja der .c Quelltext wissen, dass es sich um eine lib handelt...

    Also wäre nett, wenn mir jemand helfen könnte, komme echt nicht weiter.
    Tschö Jan



  • Um eine Bibliothek einzubinden, musst du die nötigen Header Files einbinden und der Linker muss diese Bibliotheken linken.

    Welche Header Files du für diese Windows-Spezifische Funktionen einbinden musst, weiß ich nicht und bist auch falsch, weil hier nur das ANSI C Forum. Dann frag im MFC Forum danach.



  • Nö mit MFC hat das nichts zu tun.

    Mit LoadLibrary() hast du es ja schon probiert. Wundert mich nicht, dass es nicht richtig geklappt hat. Es ist auch etwas kompliziert damit.
    Besser ist die Variante mit der .lib-Datei. Diese musst du deinem Projekt hinzufügen bzw. dem Linker übergeben, wie du ja schon beschrieben hast. Außerdem brauchst du auch eine passende Headerdatei, was du wohl schon vermutet hast. Diese Headerdatei musst du natürlich in den .c-Dateien einbinden, in denen du die Funktionen der DLL benutzt.
    Wenn du das so gemacht hast, dann dürfte es laufen. Welchen Compiler hast du eigentlich?



  • Also ich benutze MS Visual C++ 6.0.

    Ich hab eine DLL mit zugehöriger LIB und ne Doku, wo alle Funktionen beschrieben sind. Ein Headerfile ist leider nicht dabei. Sorry, ich weiss, dass das Grundlagen sind, aber was genau steht jetzt in dem Header, den ich schreiben muss?
    Der ist ja dazu da, die Funktionen, die dann im .c file verwendet werden zu deklarieren denke ich mich zu erinnern. Aber irgendwie muss doch dann im Header ein Verweiss auf die LIB bzw. DLL stehen, oder wie checkt das C-Programm, dass es sich die Funktionen aus der DLL holen soll?

    Ok ich würde das gerne mal an nem Beispiel durchziehen. In der Doku steht eine Funktion z.B. so beschrieben:

    DWORD APIENTRY CAPI_REGISTER (DWORD MessageBufferSize,
    DWORD maxLogicalConnection,
    DWORD maxBDataBlocks,
    DWORD maxBDateLen,
    DWORD * pAppIID);

    Ist es das, was ich in den Header schreiben muss? Und im .c File kann ich dann mit CAPI_REGISTER(…) die Funktion aufrufen? (Die LIB ist dem Linker übergeben)



  • Also erstmal solltest du die windows.h includieren. Dann brauchst du die Deklaration, wie du sie geschrieben hast, entweder direkt am Anfang nach den Includes oder als Headerdatei (was zu empfehlen wäre). Das dient dazu, dass der Compiler weiß, da gibts eine Funktion die so heißt und diese Parameter braucht. Die Verbindung zur DLL macht dann erst der Linker über die lib-Datei.

    Ich glaub es gibt sogar ein Tool, dass die Informationen in der lib-Datei zu einer Headerdatei machen kann, aber nagel micht nicht fest, vielleicht war das auch was anderes. Du kannst ja mal nach sowas suchen.

    Probiers jetzt einfach mal mit der eigenen Headerdatei und der Deklaration aus. Wenn was nicht funktioniert, schreib einfach nochmal :).

    Ich verschieb dich aber jetzt trotzdem mal ins Visual C++ Forum. Möglicherweise gibts ja was compilerspezifisches zu DLLs.



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum MFC mit dem Visual C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • @MacGyver_
    Ich muss demnächst auch noch ein Programm schreiben das auf die ISDN Anlage zugreift. Hast du vielleicht nen Link zu der Doku, da man im Netz leider nur sehr wenig darüber findet...



  • Ok danke, das klappt jetzt mit der LIB.

    @guenni:
    schreib mir mal ne email damit ich deine adresse hab. Ich schick dir dann mal alles, was ich so gefunden habe.
    JFCHI@GMX.NET

    Tschö


Anmelden zum Antworten