WinMain in DLL packen
-
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...