Entwickler-Ecke

Dateizugriff - komplette ResourceDLL...


Mike_C - Sa 26.04.03 15:57
Titel: komplette ResourceDLL...
Hi!

Bin nicht sicher, ob sowas mal im forum stand.. teile davon auf jeden fall.

ich will in einer DLL alle resourcen, die ich für ein programm benötige verstauen. Also Icons, Bitmaps, Wavesound, Strings.

um das alles getrennt bearbeiten zu können, und einzelne komponenten (z.B. die Wavesounds) wieder rausschmeißen zu können, will ich getrennt RES-Files. Damit kann ich einfach das, was ich nicht mehr brauche aus der DLL rausschmeißen.

Bis hierhin ist noch kein problem.

Einbinden ist auch klar


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
library Resources

...
{$R Sounds.res}
{$R Strings.res}
{$R Icons.res}
...
implementation

end.


Das ganze compiliert, ergibt meine DLL.

Wie kann ich jetzt beim Auslesen der Res-Files unterscheiden, ob ich einen WaveSound oder ein Icon oder einen String auslese? Gibt es dafür verschiedene Routinen, weiß Delphi, wo welche Resource in welchem File stehen?

Ich kann mir das nicht so wirklich vorstellen, wie das funktioniert...


Delete - Sa 26.04.03 16:31

Die stehen alle in der DLL und nicht in den res-Dateien, die du erstellt hast. Kuck dir doch mal deine DLL mit einem Ressourcen-Hacker an.


Mike_C - Sa 26.04.03 20:15

Doch noch ein problem...

ich hab jetzt eine DLL, mit 2 eingebundenen RES-Files.
Eins enthält strings, ein anderes Icons.

an die Icons komme ich (von außerhalb de DLL) mit


Quelltext
1:
2:
3:
4:
5:
var
  n: integer;
...
Icon.Handle := ExtractIcon(Hinstance, 'Resource.dll', n);
...


ran.
Allgemein Strings aus einer Resourse-Datei auslesen, kann ich damit:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
function GetResString(Nr: integer): string;
var p: PChar
begin
  p := StrAlloc(256);
  LoadString(HInsance, nr, p, 255);
  result := p;
  StrDispose(p);
end;


Das funktioniert aber nicht, wenn ich mich nicht in der DLL befinde, also wenn ich GetResString(nr) von dem Programm aus aufrufe, in dem ich die Resourcen aus Resource.dll auslese. Wie geht das nun? Muss ich da eine DLL-interne Funktion schreiben, oder kann ich das umgehen?

Ach nebenbei noch was: Müssen Icon-Dateien, die ich in ein Res-File verpacke immer quadratisch sein? Meine Icons sind nämlich nach dem Auslesen aus der DLL verzerrt.

Greetz, Mike_C


Delete - Sa 26.04.03 20:19

Kuck mal, wie du es bei den Icons gemacht hast. Du mußt hInstance der DLL mit übergeben. hInstance ist das handle der DLL welches du mit LoadLibrary bekommst.


Mike_C - Sa 26.04.03 20:22

THX! Genial!
hat noch wer einen Tipp wegen dem ICON-Prob?
Damit wäre mir sehr geholfen... :-)