Statische LIB mit überladenen Funtionen unter VC++



  • Hast du im Source vllt irgendwelche Defines stehen, die verhindern, dass der Code kompiliert wird? Hab das eben mal getestet mit ner statischen Lib, da ich die eigentlich fast nie verwende und alles hat geklappt.

    void  foo(int a);
    void  foo(float b);
    void  foo(double c);
    

    UNd wegen der DLL:
    Linker->Erweitert->Importbibliothek->(TargetDir)(TargetDir)(TargetName).lib
    So is das Standard^^ Dort einfach mal auf Standard setzen und kucken was passiert.
    rya.



  • Also #defines gibt es da ne ganze Menge aber Du meinst eher die #ifndef usw. oder? Habe da nix gefunden was Codezeilen beim compilieren ausläßt, da die Deklarationen auch gleich untereinander stehen und er dann die oberste ja auch immer kennt. Um es auf Dein Beispiel zu beziehen, er kenn nur foo(int a);

    Wegen der dll: Genau so steht es bei mir auch drin aber mit der Endung .dll

    Grüßle



  • Letzte Möglichkeit:
    Die Lib ist als C-Code kompiliert. In dem Fall hilft

    extern "C"{
    #include "theLib.h"
    }
    

    Falls das auch nicht hilft, mal bitte Compileroutput posten.

    edit: Und am besten auch etwas Code... kommt mir nämlich alles spanisch vor.^^ Normal sollte das anstandslos klappen ;).

    DLL:
    Änder das auf .lib 😉
    rya.



  • Exportierst Du die Funktionen im C- Style oder im C++- Style (mangled names).
    Ich schätze mal, wenn Du die Funktionen via C- Style exportierst, werden keine Überladungen zugelassen (wie auch).

    Edit:
    Habe gerade gelesen, dass Dir die *.lib fehlt. Würde tippen, dass Du gar nix exportierst.

    simon



  • c kennt doch keine überladungen soweit ich weiß, also kann es mit extern "C" auch nciht gehen.



  • Maxi schrieb:

    c kennt doch keine überladungen soweit ich weiß, also kann es mit extern "C" auch nciht gehen.

    Hmm, keine Ahnung, programmiere kein ANSI-C.

    @simon
    Die .lib fehlt Ihm bei ner DLL.. das isn anderes Problem 😃
    rya.



  • @simon
    Die .lib fehlt Ihm bei ner DLL.. das isn anderes Problem 😃
    rya.

    Warum soll das ein andere Problem sein?
    Wenn Du nix exportierst, gibts auch keine *.lib, wohl aber eine *.dll.
    simon



  • Ist mir echt zu hoch hier... 😡

    Also die Lib ist C++, gibt auch Abhängigkeite etc., kann also kein C sein.

    Wenn ich da statt dll die Endung auf lib ändere, dann hab ich die gleiche Datei wie vorher nur mit lib 🙂 Warum erzeugt der bei mir die anderen Dateien nicht?

    Grüßle



  • Also ich glaube du hast deine Projektdateien irgendwie zerschossen....
    Leg mal neue Projekte an und änder nur das nötigste wie include-pfade etc. Oder resette alle Einstellungen ausser die nötigen via "Vom Standard/Übergeordnetes Projekt erben" bei der Auswahl.
    Und dann probiers nochmal^^. Das is alles zu seltsam um wahr zu sein :D.
    rya.



  • Tipp: Verwende den "Dependency Walker" um zu sehen, was die DLL tatsächlich exportiert und wie sie es exportiert.



  • Hm, na dann mal auf ein Neues...

    DLL:
    Es steht beim Linker -> Erweitert - > Importbib: (TargetDir)(TargetDir)(TargetName).lib Somit sollte der das doch raffen oder? Oder muss ich erst ne Lib erzeugen und dann ne dll? Wäre mir zwar neu aber man weiß ja nie...

    Danke Euch erstmal!

    Grüßle



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.

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

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten