Ich lese die MSDN-Dokumentation auf AllocConsole
, ich verstehe kein Wort, das sich auf seinen Zweck bezieht. In einem sehr kleinen DLL-Tutorial hängt er eine DLL an eine einfache Konsolenanwendung an und in der DLL wird AllocConsole
aufgerufen. Wenn ich es aus dem DLL-Code entferne, ändert sich während der Laufzeit nichts. Also bin ich neugierig auf seinen Hauptzweck:Alloconsole Fragen
case DLL_PROCESS_ATTACH:
AllocConsole();
printf("\nInjected Successfully!");
msgBox(true);
break;
Dies hat keinen Unterschied während der Laufzeit als wenn ich AlloConsole entfernen.
Was ist, wenn die DLL in z. eine GUI-Anwendung ohne vorhandene Konsole? Wenn Sie den Rückgabewert der Funktion überprüfen, werden Sie wahrscheinlich feststellen, dass es in der Konsolenanwendung fehlschlägt. –
Dieser Code ist WRONG WRONG WRONG. Sie sollten [* nie * irgendeine Art von komplexer Initialisierung in 'DllMain' machen] (https://msdn.microsoft.com/en-us/library/windows/desktop/dn633971.aspx#general_best_practices). Das Aufrufen von printf und MsgBox sind * gigantische * Verstöße gegen diese Regel und immer falsch. AllocConsole ist zweifelhaft; Ich würde irren, wenn ich es nicht tue. Egal welches Tutorial Sie gerade lesen, hören Sie auf, es zu lesen. Die Person, die es geschrieben hat, weiß nicht, was er tut. (Abgesehen davon, selbst wenn es technisch möglich wäre, eine Konsole in 'DllMain' zuzuordnen, macht es für eine DLL einfach keinen Sinn, dies zu tun.) –
@CodyGray Ich habe eine andere Header-Datei erstellt, die in der Haupt-cpp und enthalten ist eine neue cpp-Datei, die ich gemacht habe. Die Header-Datei definiert eine Funktion, die dann in der neuen cpp-Datei erweitert wird und ab dem Zeitpunkt aufgerufen wird, an dem die Dll angehängt ist. Ist das der richtige Weg, das zu strukturieren? –