| Autor |
Beitrag |
Alibi
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: So 31.08.03 16:20
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?
Zuletzt bearbeitet von Alibi am So 31.08.03 21:06, insgesamt 1-mal bearbeitet
|
|
Alibi 
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: 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; |
Zuletzt bearbeitet von Alibi am So 31.08.03 17:04, insgesamt 1-mal bearbeitet
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: So 31.08.03 17:02
wo soll die Resource sein? Du sucht via HInstance, also nur in der selbigen Exe-Datei.
grez
msch
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
Alibi 
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: 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 
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: 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 
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: 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.
|
|
|