DLL aus den Resourcen laden



  • Guten Tag,

    Ich möchte meine DLL an mein WinMain-Programm anhängen also über die
    Resourcen.

    Wie kann ich das realisieren?

    Also wie kann ich die DLL erstmal in die Resourcen hängen?

    Also kann ich dann einfach "LoadLibrary(...)"
    aufrufen und als Zusatzt etwas angeben damit die DLL aus den Resourcen
    geladen wird?

    Oder muss ich die DLL aus den Resourcen erst auslesen und in ein Verzeichnis
    schreiben?

    Danke euch!



  • p.s: ich benutze Microsoft Visual C++ 6.0
    danke!



  • Als Custom Resource kannst du die DLL im Resourcen Editor einfügen. Du kannst die DLL nicht direkt aus dem Speicher laden, du musst die Resource dann erst auslesen und die DLL in irgendein Temp Verzeichnis schreiben und dann von dort aus mit LoadLibrary laden.

    MfG,
    :schland: *Ranner* :schland:



  • ok.

    hab allerdings schon ein kleines problem beim anhängen als "custom resource" !
    da muss ich was angeben oder so?
    also ich muss da einen "Resource Typ" eingeben. was für einen?

    wenn ich die DLL dann auslesen möchte, einfach mit "fstream" z.B. ?

    danke!



  • @{ Ranner | *Ranner* | Real_Ranner }: Wieso unterstützt du ihn bei einem so sinnfreiem Unterfangen?

    Warum willst du (eine von dir selbst erstellte?) DLL in deine .exe einbetten? Warum fügst du nicht den Code ein!?

    Greetz, Swordfish



  • Weils dafür gute Gründe geben kann. Was spricht dagegen binärdaten als Resourcen mit in die Exe zu packen? Wenn du nix sinnvolles beitragen kannst, dann halt die klappe.

    Harry H, dort kannst du irgendeinen Bezeichner angeben z.b. "Binary" oder was auch immer, wichtig ist nur, daß du diesen später beim Aufruf von FindResource() wieder benutzt. Hier ist ein kurzes minimal Beispiel, du solltest natürlich noch auf Fehler etc. prüfen.

    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    	HRSRC hRes;
    	HGLOBAL hGlobal;
    	DWORD dwSize, dwWritten;
    	HANDLE hFile;
    	HMODULE hDLL;
    
     	// TODO: Place code here.
    	hRes = FindResource( hInstance, MAKEINTRESOURCE(IDR_DLL), "BINARY" );
    	hGlobal = LoadResource( hInstance, hRes );
    
    	LockResource(hGlobal);
    
    	dwSize = SizeofResource( hInstance, hRes );
    
    	hFile = CreateFile( "myDll.DLL", GENERIC_ALL, 0, NULL, CREATE_ALWAYS, 0, NULL );
    
    	WriteFile( hFile, hGlobal, dwSize, &dwWritten, NULL );
    	CloseHandle(hFile);
    	FreeResource(hGlobal);
    
    	hDLL = LoadLibrary( "myDll.DLL" );
    	FreeLibrary( hDLL );
    
    	return 0;
    }
    

    MfG,
    :schland: *Ranner* :schland:



  • ja danke schonmal!

    also ich habe die DLL als Resource angehängt.
    aber ich sehe sie nirgendwo in meiner Entwicklungsumgebung also ich kann
    nirgendwo die Resourcen sehen?!

    es wurde irgendwie alles als ich die DLL eingefügt habe als
    Script6.rc abgespeichert und die test.dll ist auch im Projekt-Ordner.

    aber wenn ich das Projekt öffne kann ich keine Resourcen erkennen?!

    warum?



  • @Swordfish
    ich finde deine reaktion unter aller sau:

    @{ Ranner | *Ranner* | Real_Ranner }: Wieso unterstützt du ihn bei einem so sinnfreiem Unterfangen?

    Warum willst du (eine von dir selbst erstellte?) DLL in deine .exe einbetten? Warum fügst du nicht den Code ein!?

    Greetz, Swordfish

    suche mal nach Hooks im zusammenhand mit einer DLL 😉

    @*Ranner*
    das problem ist das ich bis jetzt nur in einem MFC-Projekt Resourcen eingefügt
    habe und man diese Sofort sah und ihnen halt auch eine entsprechende ID geben konnte.
    und das ist bei mir nun nicht der Fall ich kann meine Resourcen nicht sehen!

    danke!



  • so das mit dem Resourcen-Einfügen hat nun geklappt
    ich sehe sie zwar nicht aber bei dem code von *Ranner* kommt kein Fehler
    mehr bei

    hRes = FindResource( hInstance, MAKEINTRESOURCE(IDR_DLL), "BINARY" );
    

    😉

    allerdings ist die DLL dann lehr! also es ist eine myDLL.DLL in meinem
    Projekt-Verzeichnis allerdings ohne Inhalt!



  • OT:

    Swordfish schrieb:

    An ein Thema, an dessen Sinn ich zweifle, werde ich nicht meine Zeit verschwenden.

    Dann halte Dich bitte zurück und antwoerte nicht auf postings, wenn Du nichts sinnvollen beitragen willst!



  • [offtopic]
    @Jochen:

    Ja, mach ich.

    Swordfish schrieb:

    Warum willst du (eine von dir selbst erstellte?) DLL in deine .exe einbetten? Warum fügst du nicht den Code ein!?

    ^ Ich habe geantwortet, weil ich wissen wollte, was er damit vorhat.

    @*Ranner* & Harry H.:

    Tut mir leid, auf Hooks bin ich nicht gekommen.

    Ranner schrieb:

    [...] dann halt die klappe.

    Mir desswegen auf diese Art und Weise den Mund verbieten brauchst mir aber trotzdem nicht.
    [/offtopic]

    Greetz, Swordfish


Anmelden zum Antworten