c++ dll Hilfe Anfänger



  • Hallo,
    bin totaler Anfänger was c++ angeht.

    Ich soll eine dll mit hilfe von c++ ansprechen um an die Funktion ranzukommen, die diese dll hat.

    Da ich vorher nicht c++ Programmiert habe, habe mir dev-c++ geholt zum Lernen.

    2 Projekte erstellt: dll und Aufruf
    DLL erstellen hats geklappt, keine Fehler.
    Die dll habe ich in den Projektordnder Aufruf reinkopiert.

    ---DLL

    #if defined(_MSC_VER)
    #define DLL extern "C" __declspec(dllexport)
    #else
    #define DLL
    #endif

    class DLLIMPORT DllClass
    {

    DLL double AddNumbers (double a, double b) {
    return a + b;
    }
    };
    ---

    doch beim Aufruf:

    ---Aufruf
    #include <cstdlib>
    #include <iostream>
    #include <cstdio>

    extern "C" __declspec(dllimport)double AddNumbers (double a, double b);
    int main()
    {
    double result = AddNumbers(1, 2);
    printf("Das Ergebnis ist: %f\n", result);

    system("PAUSE");
    return EXIT_SUCCESS;
    }
    ---
    bekomme ich Fehlermeldung:
    [Linker error] undefined reference to `_imp__AddNumbers'
    ld returned 1 exit status
    D:\C++\dll Aufruf\Makefile.win [Build Error] [dll_Aufruf.exe] Error 1

    Was mache ich falsch?
    Bitte um Hilfe

    Gruss
    Viki



  • Die DLL exportiert eine Methode der Klasse DllClass, und das Hauptprogramm importiert eine freistehende Funktion mit C-Semantik. Will heissen, Du importierst eine ganz andere Funktion als die exportierte. Ich wundere mich sowieso, dass der Compiler eine extern "C" Deklaration einer Methode durchgehen lässt.

    Nimm in der DLL mal die ganze Klasse weg und definiere AddNumbers ebenso als freie Funktion wie sie im aufrufenden Programm deklariert ist.



  • 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.



  • Also ich habe jetze alles neu gemacht:

    --> dll

    #ifndef _DLL_H_
    #define _DLL_H_
    #if BUILDING_DLL
    # define DLLIMPORT __declspec (dllexport)
    #else /* Not BUILDING_DLL /
    # define DLLIMPORT __declspec (dllimport)
    #endif /
    Not BUILDING_DLL */

    extern "C" __declspec(dllexport) double AddNumbers(double a, double b);

    double AddNumbers (double a, double b) {
    return a + b;
    }
    ########
    --> Console Application

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    extern "C" __declspec(dllimport)double AddNumbers(double a, double b);

    int main()
    {
    double result = AddNumbers(1, 2);
    printf("Das Ergebnis ist: %f\n", result);

    system("PAUSE");
    return EXIT_SUCCESS;
    }

    *******

    Trozdem Fehler:
    [Linker error] undefined reference to `_imp__AddNumbers'
    ld returned 1 exit status
    D:\C++\Makefile.win [Build Error] [Aufruf_dll.exe] Error 1

    Bin schon am Verzweifeln...

    Gruss
    Viki



  • 1. Bindest Du die bei der DLL-Erzeugung erstellte LIB-Datei in die Konsolenanwendung ein?
    2. Ich würde die extern "C" und declspec-Angaben auch bei der Funktionsdefinition nochmal hinschreiben.


Anmelden zum Antworten