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 herumgebasteltIrgendeine 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/272670Habs 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.