Entwickler-Ecke
Windows API - FindResource will nicht? [Done]
Alibi - So 31.08.03 16:20
Titel: FindResource will nicht? [Done]
Hi,
ansich dachte ich, die Funktion ist wirklich simpel, aber sie will partout hier nicht funktionieren.
Delphi-Quelltext
1: 2: 3: 4:
| if FindResource(hInstance, 'MeinName', RT_RCDATA ) <> 0 then write('wow') else write('boo!'); |
Laut ResHacker existiert die Resource, da ist nicht der Fehler. Aber die Funktion will und will die Resource nicht finden?
Alibi - So 31.08.03 17:01
Ok, laut GetLastError bekomme ich da immer den Errorcode 1814 -> Irgendwas stimmt nicht mit dem LanguageIndentifier der Resource.
Diese wird so von einem anderen Programm in eine Exe geschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| Data := '';
AssignFile(TheFile,ParamStr(1)); Reset(TheFile); while not EOF(TheFile) do begin ReadLn(TheFile, tmp); Data := PChar(Data + tmp); end; CloseFile(TheFile);
ResH := BeginUpdateResource('EineExe.Exe', true);
UpdateResource( ResH, RT_RCDATA, 'MeinName', MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), Data, Length(Data) );
EndUpdateResource(ResH, false); |
MakeLangID hab ich hier im Forum gefunden:
Delphi-Quelltext
1: 2: 3: 4:
| function MAKELANGID(usPrimaryLanguage, usSubLanguage: BYTE): WORD; begin Result := (usSubLanguage shl 10) or usPrimaryLanguage; end; |
MSCH - So 31.08.03 17:02
wo soll die Resource sein? Du sucht via HInstance, also nur in der selbigen Exe-Datei.
grez
msch
Alibi - So 31.08.03 17:03
FindResource wird in der Exe aufgerufen, in die auch die Resource reingeschrieben wurdem, hab das letzte Posting angepasst.
Alibi - So 31.08.03 17:33
Ich hab jetzt bei BeginUpdateResource den 2. Parameter auf false gesetzt, damit die vorhandenen Resourcen nicht gelöscht werden, das wars aber nicht. ;)
Der Fehler kommt:
1814L ERROR_RESOURCE_NAME_NOT_FOUND
Ich war mit der Sprache in der Zeile verrutscht. ;)
Aber: Die Resourcennamen stimmen 100%, warum will der nicht?
Alibi - So 31.08.03 20:19
Hab jetzt einfach Zahlen (MakeIntResource) genommen statt Namen für die Resource.
Nun will ich einfach den Inhalt der Resource in ein String kopieren, das ganze fliegt mir aber bei CopyMemory um die Ohren. Alle Handles und Pointer sind soweit richtig glaub ich, sind jedenfalls nicht 0 oder nil:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| ResH := FindResource(hInstance, MakeIntResource(1000), RT_RCDATA); if ResH <> 0 then writeln('wow') else writeln(GetLastError);
BFProgramRes := LoadResource(hInstance, ResH); ResSize := SizeofResource(hInstance, ResH);
MemP := LockResource(BFProgramRes); SetLength(BFProgram,ResSize); CopyMemory(@BFProgram,MemP,ResSize); |
// Erledigt.
Move(MemP, BFProgram, ResSize);
statt CopyMemory geht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!