DLL, ergibt [LINK ERROR], Hilfe!



  • hi, ich habe mir so eine DLL gebaut:

    Header "testlib.h"

    #ifdef _cplusplus
    #define EXPORT extern "C" __declspec ( dllexport )
    #else
    #define EXPORT __declspec ( dllexport )
    #endif
    
    EXPORT int  Addierung( int , int );
    

    die .c

    #include <windows.h>
    #include "testlib.h"
    
    int WINAPI DllMain( HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved ) {
    
        return true;
    }
    
    EXPORT int CALLBACK Addierung( int s1, int s2 ) {
    
        int summe;
    
        summe = s1 + s2;
        return summe;
    }
    

    und in meiner .cpp

    #include <iostream>
    #include <windows.h>
    #include "testlib.h"
        using namespace std;
    
    #pragma hdrstop
    #pragma argsused
    
    int main(int argc, char* argv[]) {
    
        int a = 10, b = 22;
    
        Addierung( a, b );
        getchar();
        return 0;
    }
    

    das ergibt aber alles folgenden fehler:

    [Linker Error] Unresolved external 'Addierung(int, int)' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
    

    PS.: noch ne frage hinten dran, im tutorial von charles P. hat er in seiner dll zwei funktionen die text ausgeben sollen, diese hat er als BOOL deklariert, wieso als BOOL ??

    Gruß Tobi.



  • T0bi schrieb:

    Addierung



  • -.- moa haette auch knut hin schreiben können... darum gehts hier aba net -.- oder is das des problem wieso ich nen linker error bkomm?



  • Hallo,

    Was soll denn das CALLBACK da sein? Hast du die Funktion auch importiert?



  • oder is das des problem wieso ich nen linker error bkomm?

    Wenn der Compiler mit --spell-verify gestartet wird ....



  • in meinem tutorial stand nichts vom importieren... wie mach ich das den wenns nötig ist?



  • Erstens: Wenn du nicht irgendwo ein #define CALLBACK hast, dürften dort zwei unterschiedliche Aufrufkonventionen zusammenprallen.

    Zweitens: Natürlich muß das Hauptprogramm die DLL-Funktionen importieren, woher soll es die denn sonst bekommen? Das Importieren schaffst du, indem du "__declspec(dllexport)" durch "__declspec(dllimport)" ersetzt.

    Und häufig sieht das so aus:

    #ifdef MYDLL_IMPL
      #define MYDLL_API __declspec(dllexport)
    #else
      #define MYDLL_API __declspec(dllimport)
    #endif
    
    MYDLL_API int func(int param);
    

    (bei den Compiler-Einstellungen für die DLL wird "MYDLL_IMPL" definiert, beim Anwender-Porgramm nicht)



  • CStoll schrieb:

    Und häufig sieht das so aus:

    #ifdef MYDLL_IMPL
      #define MYDLL_API __declspec(dllexport)
    #else
      #define MYDLL_API __declspec(dllimport)
    #endif
    

    und wo genau soll ich das hinschreiben?



  • An den Anfang deines Headers.



  • ohh... ich glaub jetzt hab ich mein fehler... ich hatte vergessen die .lib ins programm zu linken...

    Gruß Tobi.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) 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