Funktion aus anderem Projekt aufrufen



  • Hallo,

    ich bin Programmieranfänger und möchte 2 Programme miteinander vernetzen.

    Meine Frage betrifft den Funktionsaufruf:

    Ich habe für jedes Programm ein C++-Projekt, die zu .dll compiliert werden und so von den eigendlichen Programmen ausgewertet werden. Nun möchte ich eine Funktion des Projektes 1 vom Projekt 2 aus aufrufen. Ich habe mir das etwa so vorgestellt:

    Projekt 1 (Temperatur.cpp)

    double summe(double a, double b)
    {
      double x=a+b;
      return x;
    }
    

    Aufrufendes Projekt 2 (type5.cpp)

    extern double summe(double a, double b);
    double Zahl1=...;
    double Zahl2=...;
    double r=summe (Zahl1,Zahl2);
    

    Dies funktioniert so einfach leider nicht (das Erzeugen der .dll´s ohne Funktionsaufruf klappt). Da die beiden Projekte nicht in einem Verzeichnis sind, denke ich, dass ich noch ein "Verbindung" brauche.
    Brauche ich noch eine header.h-Datei, was müsste da ungefähr drinstehen?
    Muss ich beim compilieren eine Objekt.obj-Datei mitcompilieren?

    Ich benutze MS Visual C++ 2005

    Für Hilfe und Tipps wäre ich sehr dankbar.

    Gruss skri



  • Eine Header-Datei alleine reicht für die Verbindung nicht aus (da steht auch nicht viel mehr drin als der Prototyp von summe()). Du brauchst eine Library, die du in deinem Projekt 2 dazulinken kannst.

    (zur Not kannst du auch über LoadLibrary() und GetProcAdress() die Funktion direkt aus der DLL ziehen, aber das sieht nicht mehr so elegant aus)



  • Handelt es sich bei der Library um diejenige, die beim Erstellen der .dll erzeugt wird?

    Gruss skri



  • skri schrieb:

    Handelt es sich bei der Library um diejenige, die beim Erstellen der .dll erzeugt wird?

    Gruss skri

    Es gibt grundsätzlich zwei verschiedene Arten von Libraries: dynamische, welche normalerweise auf .dll enden und statische, die unter Windows die Endung .lib haben.

    Statische Libraries sind im Prinzip OBJ-Dateien (= compilierter Code), die zu einem Paket zusammengefasst wurden. Dieses Paket kannst du in deinen Projekten verwenden; der Linker (nicht Compiler!) erledigt das für dich. Alle verwendeten LIBs werden Teil der Exe-Datei.

    Dynamische Libraries verhalten sich anders, sie bleiben separate Dateien, die zur Programmlaufzeit gelesen werden müssen. Die Handhabung ist daher komplizierter und erfordert Code aus der WinAPI. Vermutlich ist das nicht das, was du willst.

    Du solltest so vorgehen: Lass dein Projekt "Temperatur" eine statische Library erzeugen, z.B. temperatur.lib. Diese Bibliothek kannst du in deinem anderen Projekt verwenden. Du musst dazu bei den Compilereinstellungen angeben, dass diese Library dazu gelinkt werden soll. Das müsstest du also irgendwo bei den Linker-Einstellungen finden.


Anmelden zum Antworten