exe funktion exportieren und von dll importieren



  • hallo,

    ich würde gerne eine exe funktion exportieren und in einer dll importieren

    ich testete es zunächst mit einer exe, klappt aber nicht hier der code für den import :

    typedef string (__stdcall *FOO)();
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	HMODULE l_Ret;
    
    	DWORD dwReturn = 0;
    
    	l_Ret = ::LoadLibraryEx(_T("C:\\Users\\user\\Documents\\Visual Studio 2010\\Projects\\abfrage\\Debug\\ssl.exe"), NULL, DONT_RESOLVE_DLL_REFERENCES ); 
    
    	if (l_Ret != NULL)
    	{
    
    		//printf("hier");
    
    	FOO pFun = (FOO)GetProcAddress(l_Ret, "getdata");
    
    	if (pFun != NULL)
    	{
    		cout << pFun().c_str();
    
    		//pFun()
    
    		//std::cout << pFun().;
    
    	}
    	else
    	printf("nix gefunden");
    
    	}
    


  • Du hast leider nicht angegeben, was geht und was nicht geht.
    Drum hab ich selber ein bisschen herumgebastelt 🙂

    Irgendeine exe:

    #include <string>
    
    #define DLL_EXPORT __declspec(dllexport)
    
    extern "C"
    {
    	DLL_EXPORT std::string getData();
    }
    
    int main()
    {
    }
    
    DLL_EXPORT std::string getData()
    {
    	return "Test";
    }
    

    Dein Beispiel etwas angepasst. Ich verwende Code::Blocks

    #include <iostream>
    #include <string>
    
    #include <windows.h>
    
    typedef std::string (*FOO)();
    
    int main(int argc, char **argv)
    {
    	HMODULE l_Ret;
    
    	// Pfad wurde von mir entfernt wegen Datenschutz :)
    	l_Ret = LoadLibraryEx("irgendeine.exe", NULL, DONT_RESOLVE_DLL_REFERENCES);
    
    	if(l_Ret != NULL)
    	{
    		FOO pFun = (FOO)GetProcAddress(l_Ret, "getData");
    
    		if (pFun != NULL)
    		{
    			std::cout << "gefunden";
    		}
    		else
    			std::cout << "nix gefunden";
    	}
    }
    

    Wird die Funktion erkannt, so stürzt mein Programm ab (wenn ich sie ausführe). Laut dem folgenden Thread
    kann man "zwar EXEs als Ressource laden aber nicht ausführen", insofern ich es richtig verstanden habe.
    http://www.c-plusplus.net/forum/272670

    Habs selber zum ersten mal probiert, aber vielleicht hilft es weiter 😃



  • Wie wäre es, wenn Du die Funktionalität, welche exportiert werden soll einen eigenen Header samt Implementierung verpasst, und dann eine .dll daraus machst?

    Ein Executable ist keine Bibliothek.

    Edit: Ja, einen = keine @ theta



  • Tachyon schrieb:

    Ein Executable ist einen Bibliothek.

    einen = keine?



  • hallo,

    das problem ist bei dem ssl-server ,

    am besten wäre folgendes :

    eine boost ssl-server dll

    und eine dll die auf die empfangenenn daten zugreift

    eine dll bauen, die durch einen funktionsaufruf den ssl-server start, auf basis der boost asio sachen,

    dabei gibts die funktion io_service::run() die eine endlosschleife startet und daten von clienten empfängt, an sich nicht verkehrt, läuft ständig, empfangt sehr schnell daten, aber das problem ist de zugriff auf die daten,

    denn es ist eine schleife und wie kann ich duch eine andere dll auf diese funktionen zugreifen?

    wenn doch die schleife nicht wäre 😡

    habs schon mit threads versucht und so geht nicht

    also folgendes

    externes programm -> empfangs dll

    empfangs dll -> ssl-server dll

    ssl-server dll (empäfngt daten)

    ssl-server dll -> empfangs dll

    empfangs dll -> externes programm

    aber die " ssl-server dll (empäfngt daten) " ist beimd datenempfang in einer schleife ....



  • Gib den dlls doch Callback-Funktionen mit, in welche die empfangenen Daten gepackt werden sollen.


Anmelden zum Antworten