PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dll von Programm erstellen lassen



ShockerZz
24.01.2009, 20:01
Folgendes Problem:
Ich habe ein Programm (in VC++ 2008 geschrieben), bei dem ich jetzt dem Nutzer noch die Möglichkeit geben will, das Programm zu "personalisieren", in dem er z.B. das Hintergrundbild ändern kann, etc. Das wollte ich realisieren, in dem ich ein "Styler"-Programm mitliefere, das eine dll erstellen kann, aus der dann das Programm dann die entsprechenden Hintergundbilder etc. auslesen kann.
Damit die Nutzer ihre Styles mit anderen Nutzern teilen können, sollen nicht nur die Pfade zu den Dateien gespeichert werden, sondern Bilder selbst (das die dll's dadurch sehr groß werden können, ist mir natürlich dabei bewusst). Außerdem soll noch eine Funktion integriert sein, die dann den neuen Style anwendet.
Wie ist so etwas realisierbar?

Ribas
24.01.2009, 20:18
Hmmm...warum willst du unbedingt dafür eine DLL benutzten?

hackerking
24.01.2009, 20:25
er kann die datei doch auch "Daten.aeoigneahpoiungeaoiesoipngoinygor" nennen scheiß egal xD wenn er sie mit dem programm reinschreibt^^

ShockerZz
24.01.2009, 20:34
Hmmm...warum willst du unbedingt dafür eine DLL benutzten?

Gegenfrage: Was denn sonst? Ich kenne keinen anderen Dateitypen, in dem sich eine Funktion sowie Dateien speichern lassen...

mo0wm
25.01.2009, 11:10
Du kannst sowas auch mit einer einfachen Textdatei lösen. Dort werden dann Variablen gespeichert, wie zB. den Pfad zu einem Hintergrundbild oder irgendeine Farbe.
Das Einbinden von fremden DLL's kannst du dir damit auch gleich erparen.

Hamtaro
25.01.2009, 11:12
könntest du nicht einfach die Bilder alle in einem Unterordner speichern( "images" zum Beispiel), aus der die Bilder dann einfach ausgelesen werden?
Und die Farben kannst du bestimmt auch in einer .ini Datei speichern.
Sonst kannst du halt die Bilder per Ressource in deine Dll eingliedern.

blackberry
25.01.2009, 12:59
Gegenfrage: Was denn sonst? Ich kenne keinen anderen Dateitypen, in dem sich eine Funktion sowie Dateien speichern lassen...

Gegengegenfrage: Und was sind Dateitypen?

Wenn es dir also darum geht Bilder zu speichern, kannst du das auch in einer Textdatei machen.
Für Funktionen gillt das natürlich auch...
Du kannst jederzeit den Binärcode einer Funktion in eine Datei speichern und wieder laden.
Nach dem Laden einfach über VirtualAllocEx ( http://msdn.microsoft.com/en-us/library/aa366890(VS.85).aspx ) mit PAGE_EXECUTE_READWRITE ( http://msdn.microsoft.com/en-us/library/aa366786(VS.85).aspx ) Speicher reservieren, den Funktionscode mit WriteMemory ( http://msdn.microsoft.com/en-us/library/ms926296.aspx ) an seine Position bringen und über einen Funktionszeiger aufrufen.
_________________________________________

Wenn du das aber immernoch mit einer .DLL machen willst, dann lautet die Antwort zu deinem "Bilderproblem" Resourcen (-> Google).
Dein "Funktionsproblem" wird sich dabei aber als schwieriger erweisen, da es für das Schreiben von Funktionen in eine .DLL keine WinAPI Funktionen gibt (oder doch? - mir sind keine bekannt).
Auf jeden Fall würde das eine genaue Kenntniss des PE-Dateiformats erfordern.
Weiterhin, um eine Funktion zum Austauchen der Skins jedes mal individuell zu erstellen brauchst du gute Kenntnisse der Maschienensprache (das gillt auch für die weiter oben aufgeführte Methode).

Ein Umweg wäre, eine Funktion, zum Skinaustausch, in deinem Programm selbst zu implementieren und deine "Skindatei" Parameter übergeben zu lassen.
Diese Parameter könnten dann zB. auch als Resourcen in deiner .DLL gespeichert werden.


mfG. BlackBerry

zao
25.01.2009, 13:04
Im Prinzip ist es ganz einfach. Du erstellst deinen Styler und das Grundgerüst der DLL. Der Styler schreibt anschließend mittels BeginUpdateResource und co. (siehe MSDN) die gewünschten Daten (Bilder, Strings[evtl Farben]) in die DLL. Anschließend das ganze vom gewünschten Programm auslesen lassen und fertig.

Falls das der Weg ist, den du meintest. Bin ich gern bereit eine genauere Anleitung zu geben.

Grüße

Edit: BlackBerry war schneller