Dynamische DLL Funktionsaufruf mit Parameter



  • Mahlzeit,

    ich stehe gerade vor einem kleinen Problem. Und zwar habe vor eine DLL dynamisch zu laden und eine Funktion aufzurufen. Dies klappt! Nun möchte ich der Funktion einen Parameter mitgeben und da bekomme ich immer die Meldung, dass dies zu viele Argumente für den Funktionsaufruf seien.

    Mein code ist folgender:

    main.cpp

    
    #include ".\include\exampleDLL.h"
    
    int main(int argc, char** argv) {
    	typedef void (CALLBACK* DllFunction)(void);
    	
    	HMODULE hDLL; 
    	DllFunction fMessage;
    
    	hDLL = LoadLibrary(TEXT("./lang/english.dll"));
    
    	if(hDLL == NULL) {
    		// Fehler
    		std::cout << "Die Datei .dll konnte nicht geladen werden!" << std::endl;
    		return 1;
    	} 
    	
    	fMessage = (DllFunction)(GetProcAddress(hDLL,"Message"));
    	
    	if(fMessage == NULL) {
    		// Fehler
    		std::cout << "Die Funktion \"Message\" wurde in der DLL-Datei nicht gefunden !" << std::endl;
    	} else{
    		std::cout << "DLL geladen" << std::endl;
    		fMessage("test");
    	}
    
    	FreeLibrary(hDLL);
    	return 0;
    }
    
    

    Die exampleDLL Header Datei:

    #ifndef EXAMPLE_DDL_H
    #define EXAMPLE_DDL_H
    
    #include <windows.h>
    #include <iostream>
    
    #define EXAMPLE_EXPORT
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
        #ifdef EXAMPLE_EXPORT
            extern __declspec(dllexport) void Message(std::string value);
        #else
            extern __declspec(dllimport) void Message(std::string value);
        #endif
    
    #ifdef __cplusplus
    } // extren "c"
    #endif
    
    #endif
    

    und die dazugehörige cpp-Datei:

    #define EXPORTING_DLL
    #include "..\include\exampleDLL.h"
    
    BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID pReserved) {
    
        return TRUE;
    }
    
    void Message(std::string value)  { 
       std::cout << "Hello  World! I say: " << value << std::endl;
    } 
    
    

    Kann mir da wer einen Tipp geben oder kurz erklären warum dies nicht geht?

    Besten Dank schonmal



  • Was bedeutet:

    @psp3006 sagte in Dynamische DLL Funktionsaufruf mit Parameter:

    typedef void (CALLBACK* DllFunction)(void);

    ...und wie passt der Cast nach DllFunction mit der Signatur deiner Funktion zusammen?



  • @wob sagte in Dynamische DLL Funktionsaufruf mit Parameter:

    Was bedeutet:

    @psp3006 sagte in Dynamische DLL Funktionsaufruf mit Parameter:

    typedef void (CALLBACK* DllFunction)(void);

    ...und wie passt der Cast nach DllFunction mit der Signatur deiner Funktion zusammen?

    🤦🏼♂ danke allein das du nochmal die Signatur zitiert hast hat gereicht, dass ich gesehen habe das diese nicht richtig ist und ich ja eine Funktion habe der ich einen bestimmten Typ übergeben möchte.


Anmelden zum Antworten