Ich möchte ein sehr, sehr kleines Programm schreiben, das die Startargumente analysiert und eine von mehreren DLLs zum "Booten" auswählt.Wie kann ich eine DLL wie eine ausführbare Datei zur Laufzeit "starten"?
Ich habe bereits eine Anwendung geschrieben, die ich als DLL ausführen möchte, indem ich sie als Anwendung schreibe und dann die Visual Studio-Projekteigenschaften ändere, um sie stattdessen als DLL zu erstellen. Ich weiß, dass ich LoadLibrary und GetProcAddress zusammen benutzen muss, um die Funktionalität zu erhalten, die ich will, aber ich habe Probleme, eine klare und umfassende Dokumentation zu diesem Thema zu finden, da viele der Anwendungsfälle nicht wirklich dieser Art entsprechen. Außerdem muss ich diese Route basierend auf den Projekt- und Plattformbeschränkungen gehen.
Ich fand this page, die einige Informationen hat, aber es ist nicht klar genug für mich, um für meine Zwecke anzupassen.
Edit: Hier ist, wo ich gerade bin.
Ich habe eine DLL-Projekt, dessen Hauptfunktion Signatur etwas wie folgt aussieht:
__declspec(dllexport) int cdecl main(int argc, char *argv[])
ich auch ein Anwendungsprojekt haben, dessen Versuch, die DLL zu laden und die obige Funktion sieht wie folgt ausgeführt werden:
typedef int (CALLBACK* LPFNDLLFUNC1)(int, char *);
...
HMODULE dllHandle = NULL;
BOOL freeResult, runTimeLinkSuccess = FALSE;
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
if (args->IsEmpty())
{
dllHandle = LoadLibrary(L"TrueApplication.dll");
if (NULL != dllHandle)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(dllHandle, "main");
if (lpfnDllFunc1)
{
int retVal = lpfnDllFunc1(0, "1");
}
Derzeit funktioniert der LoadLibrary-Aufruf, aber GetProcAddress nicht.
Was nimmst du als den Vorteil wahr, es zu einer DLL anstelle einer EXE zu machen? Wir müssen Ihre Argumentation kennen, so dass wir keine Lösung empfehlen, die einige der von Ihnen gewünschten DLL-Vorteile "rückgängig macht". –
Die Verwendung dieser Methode ist weder meine Wahl noch meine Idee, aber es ist das, was ich angesichts der Einschränkungen der Plattform und des Projekts tun muss. Wenn ich mehrere ausführbare Dateien anstelle von DLLs verwende, muss ich im Grunde das gleiche tun, als hätte die Plattform für jede ausführbare Datei einen anderen Anwendungseintrag. Beispielsweise müssten Benutzer die App "Launcher" sowie "App 1", "App 2" usw. installieren. – Roderick