dllfunktionen exportieren ... def files?



  • Hi alle erstmal,
    wollte mich jetzt mal bissl mit dll programmierung beschäftigen, hab hier in den threads rumgeguckt und auch einiges gefunden ... aber ganz hab ichs irgendwie noch nicht hinbekommen. Was ich vielleicht noch sagen sollte, dass ich den Borland C++5.5.1 benutze(Konsolen-compiler).

    Bin jetzt die ganze Zeit an der exe gehangen, die die funktion benutzen soll, bis ich gemerkt habe, dass GetProcAddress() NULL zurückgibt(dummheit eben 😉

    Was hab ich da an der dll falsch gemacht? Hab auch gelesen dass die Funktionsnamen irgendwie _name@24 o.ä. heißen können.
    Hier mal mein code:

    #include <windows.h>
    
    #define DLLEXPORT __declspec(dllexport)
    
    DLLEXPORT void test(const char *msg) {
        MessageBox(NULL, msg, NULL, MB_OK | MB_ICONINFORMATION);
    }
    

    joa, ich denke an der dll müssts eigentlich liegen, hier nochmal mein anderer exe code:

    #include <windows.h>
    #include <iostream.h>
    #include <conio.h>
    
    typedef void (*blu1)(const char *);
    
    int main() {
        HINSTANCE loli;
        loli = LoadLibrary("dll_main.dll");
        if(loli == NULL) {
            MessageBox(NULL, "Library konnte nicht geladen werden.\r\n", "", MB_OK | MB_ICONEXCLAMATION);
            return 0;
        }
    
        blu1 test;
    
        test = (blu1)GetProcAddress(loli, "test");
        if(test == NULL) {
            WSAGetLastError();
            MessageBox(NULL, "GetProcAddress() failed", "", MB_OK | MB_ICONSTOP);
            return 0;
        }
        test("blub");
    
        FreeLibrary(loli);
    
        getch();
        return 0;
    }
    

    und eine Sache verstehe ich noch nicht so ganz, vielleicht könnt ihr mir das ja erklären: warum ich bei `typedef void (*blu1)(const char *);' auf den inhalt des zeigers blu1 zugreifen muss. Hab das zumindest bis jetzt nur so gesehen.

    Danke schonmal



  • extern "C"



  • extern "C" DLLEXPORT void test(const char *msg) {



  • achja, und was ich noch vergessen habe, in der doku etc. les ich immer was von .def files. Ich weiß wie die auszusehen hat
    (Library dll_name.dll
    EXPORTS
    function1
    function2)

    aber wie kann ich die mit dem borland c++ compiler mit"linken"?



  • mit dem extern "C" davor passiert genau das gleiche wie davor.
    Abgesehen davon hab ich keinen blassen schimmer was das bedeuten soll...könnte mir das nochmal jemand erklären wenn das notwendig ist?



  • hab mir mal den dependency walker gesaugt und damit nachgeguckt, die funktion hat dann _test geheißen? woran liegt das? ich hab das ja mit dem export "C" gemacht etc.



  • Der Borland Compiler hängt immer einen Unterstrich vor die Funktion. extern "C" verhindert das nicht, das sorgt nur dafür, dass der Funktionsname nicht im C++ Stil vermurkst wird. Lass es weg, dann siehst du im Dep-Walker, was ich meine. 🙂

    Die Funktion heißt halt "_Test". Bei GetProcAddress musst du diesen Unterstrich eben mit angeben.


Log in to reply