Threads in dll erzeugen



  • Hi,

    ich möchte multithread aktionen durch eine dll steuern, so daß ich damit die Programmierung der Hauptanwendung vereinfache. Ist das möglich? Ich habe da schon ein wenig rumprobiert aber so richtig klappt das nicht. Ich muß doch in dem Thread den header der aufrufenden datei einbinden. Nur leider hat ein dll- Objekt keinen Header. Und nun?

    Grüße
    Franky



  • Du hast 2 Möglichkeiten

    1. Du bastelst dir eine eigene Headerdatei
    z.B so:

    #ifdef __cplusplus
    #define EXPORT extern "C" __declspec (dllexport)
    #else
    #define EXPORT __declspec (dllexport)
    #endif
    
    // Hier kommen die Protoypen für die Funktionen hin
    

    2. Du benutzt LoadLibrary um die Funktionen aus der DLL zu laden



  • Also __declspec(dllexport) kann man in der exe-datei nicht mehr benutzen, eher __declspec(dllimport). 🙂
    oder eben die Variante mit LoadLibrary/GetProcAddress.

    Franky:
    Kannst du dein Problem bitte etwas klarer beschreiben? Ich habe nämlich ehrlich gesagt nicht ganz verstanden was du eigentlich willst. 😉



  • Also, es soll eine dll werden, die die Schnittstellensteuerung (RS232) übernimmt. Ich möchte also nur ein paar Funktionen haben wie z.B.

    PortOpen, WriteBuffer, Read.

    Die ganzen Hinterrundarbeiten, wie Threads, Synchronisation u.s.w. sollen halt in der dll fertig sein, so daß man die dll auch später für andere Anwendungen einfach nutzen kann. Alles klar?

    Aber so richtig habe ich das mit dem selber basteln noch nicht verstanden. Kommt der Codeausschnitt in eine .h Datei, die genauso heißt wie die dll, oder wie? Und wie funtioniert die andere Variante? Sorry, habe leider "noch" (?!) keine Ahnung davon. Und Danke schon mal.

    Grüße
    Franky



  • Also hier ist mal ein Beispiel für die Headerdatei.
    Die DLL habe ich mal RS232 genannt.

    RS232.h:

    #ifdef __cplusplus
    #ifdef MAKE_DLL
    
    #ifdef __cplusplus
    #define EXPORT extern "C" __declspec(dllexport)
    #else
    #define EXPORT __declspec(dllexport)
    #endif // __cplusplus
    
    #else
    
    #ifdef __cplusplus
    #define EXPORT extern "C" __declspec(dllimport)
    #else
    #define EXPORT __declspec(dllimport)
    #endif // __cplusplus
    
    #endif // MAKE_DLL
    EXPORT BOOL PortOpen(int);
    

    RS232.cpp:

    #define MAKE_DLL
    
    #include "RS232.h"
    
    ...
    

    Programm.cpp:

    #include "RS232.h"
    
    ...
    

    Und hier noch ein Beispiel für LoadLibrary:

    typedef BOOL (*PORTOPEN)(int);
    
    ...
    
    HINSTANCE hLibrary;
    PORTOPEN PortOpen;
    
    hLibrary = LoadLibrary("RS232.DLL");
    PortOpen = (PORTOPEN) GetProcAddress(hLibrary, "PortOpen");
    
    PortOpen(80);
    
    FreeLibrary(hLibrary);
    

Anmelden zum Antworten