WinMain in DLL packen
-
1.Naja mir gehts eientlich nicht um die windowsprogrammierung oder die WinMain, sondern nur wie ich diese in eine DLL bekomme.
2. Das bringt mir das ich die WinMain aus meiner anwendung rausnehmen kann und in die DLL packe, wie es zb auch die MFC von microsoft macht.
und ich so sicher stellen kann was alles ausgeführt wird bevor ich die kontrolle an das programm abgebe.Ja ich weis das man eine DLL nicht starten kann.
Aber wie gesagt kann man die main funktion (geht sicher auch mit der main und nicht nur mit der WinMain) in eine DLL packen, die DLL alleine ist dadurch natürlic nicht lauffähig, aber das programm braucht/darf keine Main Funktion mehr implementieren.
-
Die MFC packt die WinMain nicht in eine DLL,
Deine Hauptklasse wird durch ein Makro als Hauptklasse definiert und
dieses Makro beinhaltet auch die WinMain
MfG Drako
-
Dieser Thread wurde von Moderator/in pumuckl 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.
-
DrakoXP sicher?
ok dachte die MFC würde die WinMain in eine DLL packen.ps: hast du vieleicht einen link oder beispiel code wo ich mir das macro ansehen kann?
Aber auf jedenfall hab ich es schonmal geschafft die WinMain in eine DLL zu packen.
Nur leider weis ich nictmehr wie.eigentlich funktionierts ja so wie ich es gemacht habe, nur wird die winMain anscheined öfters Deklariert.
Das passiert da die Header Datei öfters includiert wird.
wies nur nicht ganz wie ich das lösen soll
-
ok, also nach dieser Lektüre:
http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel5.htm
bin ich nun zu dem Schluss gekommen, dass die MFC wohl doch iwo anders die WinMain definiert :pallerdings kann ich mir nicht vorstellen wie :p
ich habe in der Vergangenheit schon paarmal an eigenen Bibliotheken gearbeitet und da hat sich die Variante mit dem #define doch als recht praktikabel erwiesen.
ok, WinMain in eine DLL... is ja eig kein Ding.
du schreibst einfach in deine DLL: (in eine *.cpp-Datei!)
int WINAPI __declspec(dllexport) WinMain(HINSTANCE Hinstance, /* ... */) { // ... }und führst da deinen code aus
Header brauchst du keinen mehr, da das System automatisch zu dieser WinMain linkt.außerdem musst du darauf achten, dass das Programm, welches deine DLL nutzt natürlich KEINE WinMain haben darf, weil die ja sonst 2 mal da ist.
MfG DrakoXP
-
DrakoXP schrieb:
ok, also nach dieser Lektüre:
http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel5.htm
bin ich nun zu dem Schluss gekommen, dass die MFC wohl doch iwo anders die WinMain definiert :pallerdings kann ich mir nicht vorstellen wie :p
ich habe in der Vergangenheit schon paarmal an eigenen Bibliotheken gearbeitet und da hat sich die Variante mit dem #define doch als recht praktikabel erwiesen.
ok, WinMain in eine DLL... is ja eig kein Ding.
du schreibst einfach in deine DLL: (in eine *.cpp-Datei!)
int WINAPI __declspec(dllexport) WinMain(HINSTANCE Hinstance, /* ... */) { // ... }und führst da deinen code aus
Header brauchst du keinen mehr, da das System automatisch zu dieser WinMain linkt.außerdem musst du darauf achten, dass das Programm, welches deine DLL nutzt natürlich KEINE WinMain haben darf, weil die ja sonst 2 mal da ist.
MfG DrakoXP
quark das geht nicht, WinMain wird von der CRT aufgerufen aus WinMainCRTStartup, das ist der wahre entrypoint, wenn man die CRT benutzt. du kannst das höchstens in ne statische lib hereintun die dann ne main in der dll aufruft oder so allerdings ist das doch voll der quatsch. lass die WinMain dadrin und gut ist es.
-
schon probiert?
theoretisch sollte es gehen...
also eine DLL, wo eine WinMain drin ist zum Projekt linken...
dann sollte die WinMainCRTStartup ergentlich die WinMain aus der Dll ausführen.eigentlich sollte dem nichts im Wege stehen.

ansonsten hast du natürlich recht, eine statische Lib wäre für eine WinMain der bessere Platz
-
DrakoXP schrieb:
schon probiert?
theoretisch sollte es gehen...
also eine DLL, wo eine WinMain drin ist zum Projekt linken...
dann sollte die WinMainCRTStartup ergentlich die WinMain aus der Dll ausführen.eigentlich sollte dem nichts im Wege stehen.

ansonsten hast du natürlich recht, eine statische Lib wäre für eine WinMain der bessere Platz
jap wenn er die generierte importlib der dll in sein projekt einbindet
-
@Bigbigmek
Erklär doch mal, was das bringen soll.
Eine DLL läßt sich nicht starten. Eine WinMain, die in einer DLL liegt, kann also nicht als Programm-Einstiegspunkt dienen.
Wennn Du die DLL mit einer EXE startest, brauchst Du in der EXE eine WinMain als Einstiegspunkt. Ohne WinMain hast Du keine lauffähige EXE. Sobald Du dann die DLL startest, registriert das Programm zwei WinMain-Funktionen- was das bewirkt, darüber will ich nicht spekulieren. Auf jeden Fall wird es Fehler geben.
-
Elektronix:
Klar kann sich die WinMain in einder DLL befinden.
Was das bringen soll?ganz einfach, ich kann das ganze von meinem programm in eine DLL auslagern.
Im programm selber bracuh ich dann nur eine klasse zu definieren und von ihr ein globales objekt anzulegen.Die Klasse hatt dan funktionen wie Initi, Unload, Run was ich halt brauche, diese funktionen werden von der WinMain die sich in der DLL befindet aufgerufen.
vorteil ist, ich weis ganz genau was alles gemacht wird bevor und nachdem der Code in meinem programm ausgeführt wird.
da die WinMain ja in der DLL liegt und nicht im programm kann ich ja initialisierungen vornehmen und am ende nichtmehr gebrauchtes freigeben.
die WinMain darf in der DLL nicht in einer cpp Datei sein sonst wird sie nicht gefunden.
hab sie jetzt ihn einen header Datei gepackt die nur einmal ausgeführt wird, und jetzt klapts.trozdem danke an alle.
-
Ok wenn es klappt an post doch mal deinen Code. Wuerde mich ja schon intressieren, da ich das eig nicht glauben kann.
Peace & Blessed Love C0de4Fun
-
C0de4Fun schrieb:
Ok wenn es klappt an post doch mal deinen Code. Wuerde mich ja schon intressieren, da ich das eig nicht glauben kann.
Peace & Blessed Love C0de4Fun
wieso soll es nicht klappen. natürlich klappt es wenn er die stub importlib der dll, die ein WinMain symbol enthält, in sein projekt aufnimmt.
-
wenn du sie in eine Header packst und die Header im Hauptprogramm inkludierst...
dann ist die WinMain nicht in einer DLL, sondern in deinem Hauptprogrammm...
aber egal :p
-
DrakoXP: ja ist mir klar, ich mein das aber rein vom text her, ich muss es nicht in ein cpp file in meinem programm schreiben.
-
ganz ehrlich, wenn die WinMain bloß in nem Header ist, war der ganze Thread über
die Möglichkeit einer WinMain in einer DLL sinnlos...