Dll's verwenden??
-
das geht doch auch wenn ich es in eine .h Datei schreibe und die überall include oder??
noch was: kann ich diese dll's auch in c++ schreiben oder muss ich da eine neue Sprache lernen?da du jetzt schon dabei bist willst du mir bitte auch die frage beantworten: http://www.c-plusplus.net/forum/viewtopic-var-t-is-178180.html ??
Danke schon mal für alle deine Antworten!
-
Beispiel:
Du schreibst eine Funktion, die sagen wir mal, ein paar Anwendungen oft benötigen (z.B. Sleep () etc.). Dann ist es sinnvoll, diese Funktion als eine DLL zu kompilieren, um sie dann den Programmen zur Verfügung zu stellen. Denn sonst müsste bei jeder Anwendung diese Funktion extra mit in die *.exe kompiliert worden sein, was natürlich völlig überflüssig ist.
-
muss ich dann auch
#include "sleep.dll"schreiben oder wie geht das?
-
Dazu hatten wir erst kürzlich einen ausführlichen Thread:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-177077-and-highlight-is-dll*.html
-
das geht doch auch wenn ich es in eine .h Datei schreibe und die überall include oder??
Ja schon, aber NUR beim Kompilieren des Programmes. Der Sinn von DLL's ist ja, dass die verschiedenen Anwendungen zur Laufzeit auf die Funktionen der DLL's zugreifen können. Es ist z.B. nicht möglich, dass du eine eigene Funktion zum Ändern eines Registrywerts schreibst, denn das alles verwaltet Windows, und du hast keinen Zugriff darauf. Deshalb stellt Windows extra eine DLL zur Verfügung, in der die entsprechenden Funktionen definiert sind, damit alle Programme Zugriff auf die Registry haben (nur als Beispiel)
noch was: kann ich diese dll's auch in c++ schreiben oder muss ich da eine neue Sprache lernen?
Du kannst ganz normal C++ dafür hernehmen.
da du jetzt schon dabei bist willst du mir bitte auch die frage beantworten: http://www.c-plusplus.net/forum/viewtopic-var-t-is-178180.html ??
Sorry, habe hier kein Word sondern nur OpenOffice, deshalb kann ich dir da kaum helfen...
-
danke für eure antworten hab mich heute wieder mal weitergebildet

-
Hab dir noch schnell nen Beispiel zum Laden einer DLL zusammengefrickelt:
Erstmal zur Defninition der Funktionen, die in der DLL ausgelagert werden sollen. Die folgende Datei wird dann zur DLL kompiliert:
dll.cpp:
#include "dll.h" #include <windows.h> #include <iostream> void hallo() { std::cout<<"HALLO AUS DER DLL !!!!"; } BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ) { switch (reason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } /* Returns TRUE on success, FALSE on failure */ return TRUE; }Nun die dazugehörige Headerdatei (benötigt man zur Kompilierung der DLL:)
#ifndef _DLL_H_ #define _DLL_H_ #if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #else /* Not BUILDING_DLL */ # define DLLIMPORT __declspec (dllimport) #endif /* Not BUILDING_DLL */ extern "C" { DLLIMPORT void hallo (); } #endifNachdem du nun die DLL erfolgreich kompilert hast, kannst du sie nun wiefolgt anwenden;
#include <iostream> #include <windows.h> using namespace std; typedef void (*ptrhallo)(); int main () { ptrhallo MeineDllFunktion; HINSTANCE hLib; //Holt mir das Handle auf die DLL hLib = LoadLibrary("Sleep.dll"); BOOL status; if (hLib) { MeineDllFunktion = (ptrhallo) GetProcAddress(hLib, "hallo"); MeineDllFunktion (); } else cout << "Fehler: Konnte die Funktion nicht aufrufen" <<"\n"; status = FreeLibrary(hLib); //Löst das Handle wieder getchar (); return 0; }Hoffe das hilft weiter... Könnte ich unten auch mal posten

Verschiebt das bitte noch in's WinAPI Subforum.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hätte da noch ne Frage.
Könntest du vllt ein bissl mehr dazu erzählen ? :
mikey schrieb:
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ) { switch (reason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } /* Returns TRUE on success, FALSE on failure */ return TRUE; }Wozu ist das genau gut, wie läuft das eigentlich intern alles ab. Also wann kommt die DLLMain zum einsatz. Halt ein bissl Theorie. Habe nämlich nicht viel Plan von sowas

-
Und nochwas. Wenn ich Klassen in dll's packe. Kann ich dann in dem Code, der die dll auruft auch Instanzen der Klasse anlegen und wie sieht das aus. Bei Funktion ist es ja mit Fkt.-Pointer getan und bei Klassen ???
Edit->Last:
Wieso funktioniert hier :extern "C" DLLIMPORT void hey() { };auch ohne das DLLIMPORT ?