Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 3 Fragen zu DLLs als Resource Datei für Text und Bilder (https://www.delphipraxis.net/12166-3-fragen-zu-dlls-als-resource-datei-fuer-text-und-bilder.html)

Karsten 23. Nov 2003 11:43

Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
 
Hallo,

@scp
so in der Art hatte ich es ja auch am Anfang. Nur befindet sich in der dll 'ne absolut Optionale Funktion die wenn die dll sich im Programm-Verzeichnis befindet bein Programmstart ausgeführt wird und der Vorschlag von OLI_T klingt irgendwie gut.

Im grunde ist es relativ egal wo die Funktionen sich befinden aber hier ist es jetzt zu einer Frage der Ehre geworden. Die Lesefunktion muß aus der dll exportiert werden weil ich es jetzt so angefanen habe, irgendwie muß es funktionieren und es gilt jetzt herauszufinden wo bei mir das Problem ist.

Ich sehe das ganze eher als Vorbereitung auf eine weiterführende Benutzung von dll-Dateien.

@Luckie

Delphi-Quellcode:
function GetImage(Index: Integer): TImage; stdcall;
var
  LoadPic: String;
  TempJpeg:TJpegImage;
  ResStream: TResourceStream;
begin
  Result := nil;
 
  LoadPic := 'Bild' + IntToStr(Index);
  ResStream := TResourceStream.Create(HInstance, LoadPic, 'JPEG');
  TempJpeg := TJpegImage.Create;

  try
    TempJpeg.LoadFromStream(ResStream);
    Result.Picture.Bitmap.Assign(TempJpeg);
  finally
 
  ...
Ich habe HInstance als Handle angegeben, klingt irgendwie logisch. Dummerweise bekomme ich eine Fehlermeldung bein Ausführen des Progs:

Access violation at address 01301805 in Module 'MYDLL.DLL'. Read of address FFFFFFFF.

Ich denke mal das es sich hierbei um
Delphi-Quellcode:
TempJpeg.LoadFromStream(ResStream);
handeln kann.

Wie kann ich ein Tracing in der dll bewerkstelligen ? Oder hat jemand eine Idee was hier falsch sein könnte ?


Gruß,
Karsten

scp 23. Nov 2003 21:45

Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
 
Zitat:

Zitat von Karsten
Hallo,

@scp
so in der Art hatte ich es ja auch am Anfang. Nur befindet sich in der dll 'ne absolut Optionale Funktion die wenn die dll sich im Programm-Verzeichnis befindet bein Programmstart ausgeführt wird und der Vorschlag von OLI_T klingt irgendwie gut.

Im grunde ist es relativ egal wo die Funktionen sich befinden aber hier ist es jetzt zu einer Frage der Ehre geworden. Die Lesefunktion muß aus der dll exportiert werden weil ich es jetzt so angefanen habe, irgendwie muß es funktionieren und es gilt jetzt herauszufinden wo bei mir das Problem ist.

Ich sehe das ganze eher als Vorbereitung auf eine weiterführende Benutzung von dll-Dateien.

Das du die andere Variante zum laufen kriegen willst kann ich jetz verstehen.
Aber noch etwas zu meiner Variante: Wenn du genauer hinsiehst, die Funktion wird ja nur aufgerufen, wenn die DLL vorhanden ist und die Funktion auch. Ansonsten würde nichts passeieren, auch kein Fehler. Deshalb kann die DLL auch optional sein.

Karsten 24. Nov 2003 09:21

Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
 
@scp

natuerlich hast Du mit Deiner Aussage recht, es gibt halt diese 2 Wege. Nur waehre die komplette Auslagerung in die dll mal 'ne klasse Uebung fuer weitere dll-vorhaben. Ich denke sogar das sich in meinem aktuellen Fall der Code eher verdoppelt wenn ich die Funktionen in die dll auslagere. Es ist halt 'ne Frage der Ehre.

Sollte ich bis Ende der Woche meine dll nicht 100 %ig am Laufen haben, dann werde ich die Funktionen wieder in das Hauptprogramm verlagern und dann hat Samurei keine Ehre mehr :oops: .

Aber Samurei kann auch nicht mit der staendig auftretenden Fehlermeldung leben.

Gruss,
Karsten

Karsten 26. Nov 2003 21:38

Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
 
Hallo,

ich kämpfe noch.

Innerhalb der dll habe ich ja die Funktion GetImage definiert. Da ich nicht weiß wie ich ein Tracing innerhalb der dll bewerkstellige habe ich einfach mehrere ShowMessage eingefügt.

Code:
function GetImage(Index: Integer): TImage; stdcall;
...
  Result := nil;
 
  LoadPic := 'Bild' + IntToStr(Index);

  ShowMessage(LoadPic);      <-- Ist in der Resource Datei, kann also nicht das Problem sein

  ResStream := TResourceStream.Create(HInstance, LoadPic, 'JPEG');

  try
    TempJpeg.LoadFromStream(ResStream);

    ShowMessage('Loaded from Stream');

    Result.Picture.Bitmap.Assign(TempJpeg);

    ShowMessage('Assigned to picture');

...
Beim durchlaufen des codes habe ich festgestellt das die Zeile
Code:
    Result.Picture.Bitmap.Assign(TempJpeg);
die Fehlermeldung liefert.

Was ich jetzt bisher noch nicht weiß ist ob das TempJpeg.LoadFromStream(ResStream); ins Leere greift und in TempJpeg kein gültiges Bild geladen wurde oder ob es wirklich Result.Picture.Bitmap.Assign(TempJpeg); ist was den Fehler verursacht.

Access violation at address 01301805 in Module 'MYDLL.DLL'. Read of address FFFFFFFF.

Hat hier vieleicht noch jemand eine Idee wie man das Problem noch weiter eingrenzen kann ?

Danke,
Karsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:03 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz