einbinden via #import



  • Artchi schrieb:

    #import gehört doch garnicht mehr zum C++-Standard?!

    wie zieh ich mir stattdessen meine DLL's ins Projekt?



  • Gib die libs bei den Linker Einstellungen an.



  • simon.gysi schrieb:

    Gib die libs bei den Linker Einstellungen an.

    Du meinst z.B. im Visual Studio unter Project -> Settings -> link ?
    Wenn ichs dort unter Object/library modules eintrage bekomme ich ein Problem mit dem Leerzeiche im Pfad zur msado15.dll "C:\PROGRAMME\GEMEINSAME DATEIEN\SYSTEM\ADO\msado15.dll", wie kann ich das am besten lösen?



  • Anführungszeichn drum setzen.



  • Ja, dort gibts ein Addition Libraries o.ä.
    Und dann musst Du aber nicht die *.dll's referenzieren, sondern die *.lib's.

    Entweder verwendest Du absolute Pfade zu den Lib's oder relative (würde ich favorisieren). Zudem gibts noch eine Einstellung für zusätzliche Library Pfade.

    Simon



  • Die DLL werden dynamisch gelinkt, folglich müssen sie nicht direkt angegeben werden. Es reicht wenn sie zur Laufzeit deines Programms gefunden werden (z.B. im gleichen Verzeichnis liegen, wie die EXE). Die LIB-Datei mußt du im Linker->Eingabe (Linker->Input) eintragen. Kannst sie aber auch per Drag&Drop aus dem Explorer in den Projektbaum ziehen. 😉



  • Danke erstmal soweit für die vielen Hinweise und Info's!

    Aber, wenn ich die msado15.dll einbinden will, wo finde ich die dazugehörige lib?
    Ich meine dll's sind doch an sich auch libraries. Entweder bin ich grad nur blind, oder es hat einfach noch nicht klick gemacht.


  • Mod

    inva schrieb:

    Danke erstmal soweit für die vielen Hinweise und Info's!

    Aber, wenn ich die msado15.dll einbinden will, wo finde ich die dazugehörige lib?
    Ich meine dll's sind doch an sich auch libraries. Entweder bin ich grad nur blind, oder es hat einfach noch nicht klick gemacht.

    Da gibt es keine LIB weil dies eine COM Bibliothek ist, deren Interfaces direkt über #import genutzt werden.



  • Ja, hast im Prinzip Recht. Aber das ganze ist am Ende nunmal Compiler-spezifisch. Und der MSVC will nunmal eine passende LIB haben (die ist dann auch viel kleiner, weil da nur ne Art Mapping drin ist). Genaueres zu DLLs findet man in der MSDN. Wenn du keine LIB zu der DLL hast, mußt du sie beim DLL-Urheber besorgen, der muß die ja haben bzw. mit seinem MSVC erzeugen können.



  • Martin Richter schrieb:

    inva schrieb:

    Danke erstmal soweit für die vielen Hinweise und Info's!

    Aber, wenn ich die msado15.dll einbinden will, wo finde ich die dazugehörige lib?
    Ich meine dll's sind doch an sich auch libraries. Entweder bin ich grad nur blind, oder es hat einfach noch nicht klick gemacht.

    Da gibt es keine LIB weil dies eine COM Bibliothek ist, deren Interfaces direkt über #import genutzt werden.

    Also ists doch notwendig die Einbindung via #import zu realisieren - und ich muss keine besondere Linker Option setzen sondern die Pfade nur unter Tools -> Options -> Directories -> Include/Library hinzufügen?

    Sollte dies so sein, wirft das wieder mein anfängliches Problem auf, wie verhindere ich ein doppeltes #import wenn ichs in ne .h datei packe, die ich mehrmals einbinde?


  • Mod

    Du kannst Die Interfaces bei ADO direkt aus den SDK Headern holen. Du kannst die Header einmal mit import erzeugen lassen und dann einfach die erzeugten Dateien direkt benutzen ohne weiteres import (so mache ich es oft). Die Dateien wandern dann mit in das Source Control System.



  • Martin Richter schrieb:

    Du kannst Die Interfaces bei ADO direkt aus den SDK Headern holen. Du kannst die Header einmal mit import erzeugen lassen und dann einfach die erzeugten Dateien direkt benutzen ohne weiteres import (so mache ich es oft). Die Dateien wandern dann mit in das Source Control System.

    Nur um sicherzustellen, dass ich dich richtig verstehe.
    Ich muss einmal die #import Anweisung ausführen, bzw. implementieren und einen Build drüber laufen lassen und kann die import Anweisung danach wieder aus dem Code rausnehmen, weil ich die msado15.cpp/.h dann habe? Soweit richtig?
    Das wäre ja echt gut.

    *edit*
    bzw. erhalte ich dann eine msado15.tlh und muss diese dann wahrscheinlich, wie jede .lib auch, referenzieren?



  • Nein, die .thl includest du dann wie jede andere Header.



  • hustbaer schrieb:

    Nein, die .thl includest du dann wie jede andere Header.

    Ok, danke für die vielen hilf- und aufschlußreichen Hinweise!


  • Mod

    inva schrieb:

    bzw. erhalte ich dann eine msado15.tlh und muss diese dann wahrscheinlich, wie jede .lib auch, referenzieren?

    Nein! Es ist eine pure Header Datei die alles hat was man braucht.
    Für COM Objekte wird niemlas eine LIB Datei benötigt.

    Außer es gibt einen separaten Storage für GUID Definitionen. Seit es aber __uuidof gibt habe ich so was nicht mehr erlebt. Und das ist so etwa 10 Jahre her, dass ich sowas nutzen musste 🙂


Anmelden zum Antworten