Problem mit Win32 DLL



  • Hallo,

    ich schreibe mir für mein Win32-API Programm eine DLL, wenn ich kompilieren möchte, erscheint jedoch folgende Fehlermeldung:
    "fatal error: #Fehler: eh.h is only for C++!"

    Hier entsprechend meinen doch noch sehr kleinen Code. Wo is der Fehler?

    Datei lib.c

    #include <windows.h>
    #include <string>
    using namespace std;
    #include "lib.h"
    
    int WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
    {
    	return(TRUE);
    }
    
    EXPORT CALLBACK r__msgbox(string* r_param, HINSTANCE r_handle, HINSTANCE r_handleex);
    {
    	// funktionscode
    	// ..........
    }
    

    Und der entspr. Header

    #ifdef __cplusplus
    #define EXPORT extern "C" __declspec(dllexport)
    #else
    #define EXPORT __declspec(dllexport)
    #endif 
    
    EXPORT CALLBACK r__msgbox(string* r_param, HINSTANCE r_handle, HINSTANCE r_handleex);
    

    Achja, dann habe ich noch eine ganz wichtige Frage: Kann ich bei meiner Win32 Anwendung die DLL in die Anwendung mitkompilieren? Also dass die DLL eben in der EXE selbst vorhanden ist. Das fände ich sehr praktisch. Müsste eigentli. gehen, oder? Bei MFC kann man die Bibliotheken ja auch mitkompilieren.



  • lib.c

    #include <string>
    using namespace std;
    ...

    sieht das für dich nach C oder C++ aus ?



  • Oh ich Noob 😃
    Wie komm ich darauf, die Datei .c zu nennen... Naja jetz kommt die Meldung "Funktionskopf fehlt". 😕
    Und wie sieht es mit der Frage bez. DLL linken aus? Weiß das jemand?

    Danke nochmal. Muss noch viel lernen*g*



  • Wie komm ich darauf, die Datei .c zu nennen... Naja jetz kommt die Meldung "Funktionskopf fehlt".

    EXPORT CALLBACK r__msgbox(string* r_param, HINSTANCE r_handle, HINSTANCE r_handleex);
    {
    }
    

    mach mal das ; weg

    Im Verzeichnis wo deine dll landet solltest du auch ne .lib finden. Linke diese zu deiner exe dazu und die dll wird dann automatisch beim programmstart geladen 😉



  • Schon klar, ich möchte aber, dass die DLL in der EXE ist, und nicht mehr als Datei beiliegen muss 🙂
    So wie man es bei MFC dazulinken kann.



  • Ne DLL in der exe wird auch Library geannt 😃

    Bei der Projekterstellung kannst du wählen ob du ne DLL (dynamic link library) oder eine Statische Lib haben willst. Wählst du das zweite ist die landed der gesammte code in der lib und wird in deine exe statisch eingelinkt.


Anmelden zum Antworten