Entwickler-Ecke

Windows API - Ressourcen können nicht gefunden werden


FrEaKY - Di 10.05.11 17:02
Titel: Ressourcen können nicht gefunden werden
Ich sitze hier seit Stunden an einem Problem, das mich fast in den Wahnsinn treibt. :autsch:
Ich versuche ein BITMAP aus einer Ressource zu laden und nie passiert was. Mittels GetLastError bekomme ich 1812 - ERROR_RESOURCE_DATA_NOT_FOUND, was absolut unmöglich ist. Ich hab schon dutzende Kombinationen probiert, mit Delphis ImageEditor, ResourceHacker, mit RC-Dateien. Nichts funktioniert.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
bmp: hbitmap;
begin
    bmp := LoadBitmap(hinstance, MAKEINTRESOURCE(100));

  //  SendMessage(himage1,STM_SETIMAGE,IMAGE_BITMAP,bmp);

    err := GetLastError;
    MessageBox(hw1, pointer(inttostr(err)),''0);
end;

Die Ressource lade ich ganz einfach mit:

Delphi-Quelltext
1:
{$R RESOS.RES}                    

Und diese wird aus RESOS.rc erstellt, mittels

Quelltext
1:
100 BITMAP A.bmp                    

Habe aber wie gesagt auch noch andere Kombinationen probiert, sogar nur den ImageEditor von Borland genommen. Nichtmal damit geht es.
Das ist pure Qual bei dem Wetter. :roll:
Weiß einer, was da los sein könnte?


jaenicke - Di 10.05.11 17:24

user profile iconFrEaKY hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
    err := GetLastError;
    MessageBox(hw1, pointer(inttostr(err)),''0);
end;
Warum nicht einfach:

Delphi-Quelltext
1:
2:
3:
ShowMessage(SysErrorMessage(GetLastError));
// oder:
MessageBox(hw1, PChar(IntToStr(err)), ''0);
Und was die Ressourcen angeht, nimm doch einfach einen normalen Bezeichner, wenn das so bei dir nicht geht. Makeintresource ist jedenfalls wohl ohnehin unpassend für deine Ressourcendatei.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  bmp: hbitmap;
begin
  bmp := LoadBitmap(hinstance, 'Beispiel');
  Image1.Picture.Bitmap.Handle := bmp; // als Beispiel

  ShowMessage(SysErrorMessage(GetLastError));
end;

Quelltext
1:
Beispiel BITMAP A.bmp                    
Ich vermute einmal das geht, grad keine Zeit zum Testen.


FrEaKY - Di 10.05.11 17:49

Leider immer noch das gleiche Ergebnis. Fehler 1812. Ich hab noch vergessen zu erwähnen, dass das hier nonVcl ist. Also SysErrorMessage geht hier nicht.
Was aber interessant ist: wenn ich bei LoadBitmap hInstance durch 0 ersetze, kommt Fehler 1814. ERROR_RESOURCE_NAME_NOT_FOUND.
Naja, interessant um nicht zu sagen es macht die Sache nur noch verwirrender... o_O


Delete - Di 10.05.11 17:52

C:\Dokumente und Einstellungen\Michael>net helpmsg 1812

Die angegebene Image-Datei enthält keinen Ressourcenabschnitt.


jaenicke - Di 10.05.11 17:53

user profile iconFrEaKY hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab noch vergessen zu erwähnen, dass das hier nonVcl ist.
Ach son Zeugs... naja, ich sag nix weiter...

Vielleicht so?

Delphi-Quelltext
1:
  bmp := LoadBitmap(GetModuleHandle(nil), 'Beispiel');                    

// EDIT:
Und wenn das auch nicht geht, hast du bei deinem nonVcl-Gespiele irgendetwas Wichtiges rausgeworfen...


FrEaKY - Di 10.05.11 17:56

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconFrEaKY hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab noch vergessen zu erwähnen, dass das hier nonVcl ist.
Ach son Zeugs... naja, ich sag nix weiter...

Vielleicht so?

Delphi-Quelltext
1:
  bmp := LoadBitmap(GetModuleHandle(nil), 'Beispiel');                    

WOW! Das ging auf Anhieb! Da fällt mir aber ein Stein vom Herzen :D
Dankeschön


jaenicke - Di 10.05.11 17:59

Dann hast du in der Unit SysInit vermutlich den Abschnitt in _InitExe oder so herausgeworfen, der HInstance setzt. Dann kannst du das natürlich auch nirgends verwenden, was schlecht ist, weil das öfter benutzt wird.


FrEaKY - Di 10.05.11 18:05

Eigentlich hab ich (diesmal) garnichts rausgeworfen. Standard-RTL und Stanard Windows-Unit :!: Sehr bizarr.


jaenicke - Di 10.05.11 18:41

Jetzt habe ich es doch einmal getestet.

Winziges Projekt ohne irgendwas anderes, funktioniert: :nixweiss:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
program Project112;

uses
  Windows, SysUtils;

{$R RESOS.RES}

var
  bmp: HBITMAP;
begin
  bmp := LoadBitmap(HInstance, 'Beispiel');
  MessageBox(0, PChar(IntToStr(GetLastError)), ''0);
end.