Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi string aus resource auslesen schlägt fehl... (https://www.delphipraxis.net/51440-string-aus-resource-auslesen-schlaegt-fehl.html)

TheGame1492 12. Aug 2005 13:23


string aus resource auslesen schlägt fehl...
 
moin


hab wieder mal ein updateresource problem :(

ich schreibe mit folgendem code 2 strings in eine exe....

Delphi-Quellcode:

test1 := 'blabla';
test2 := 'huhu';

pResourceID := MakeIntResource('test1');
            if not UpdateResource(hInst, RT_STRING, pResourceID, MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL), PWideChar(test1), Length(test1)) then
              MessageDlg(SysErrorMessage(GetLastError), mtError, [mbOk], 0);

 
pResourceID := MakeIntResource('test2');
            if not UpdateResource(hInst, RT_STRING, pResourceID,MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL) , PWideChar(test2), Length(test2)) then
              MessageDlg(SysErrorMessage(GetLastError), mtError, [mbOk], 0);
... dann will ich sie wieder auslesen mit folgender function....

Delphi-Quellcode:

function TForm1.ReadResString( res: string ): string;
var
  tmp: pchar;
  HI, HG: Cardinal;
  Resource: Pointer;
  pResourceID: PChar;
begin
  pResourceID := MakeIntResource(res);
  HI := FindResource(hInstance, pResourceID, RT_STRING);
  if HI <> 0 then
  begin
    HG := LoadResource(hInstance, HI);
    if HG <> 0 then
    begin
      Resource := LockResource( HG );
      if Assigned(Resource) then
      begin
        tmp := Resource;
        result := string(tmp);
      end;
    end;
  end
  else
  begin
    ShowMessage(SysErrorMessage(GetLastError));
    Result := 'ERROR';
  end;
end;plus
wenn ich mir nun string nr.1(test1) anschau is am ende immer ein __ dran gehängt: blabla_

woran liegt das?

wenn ich mir dann string nr.2(test2) wird immer das wort PAD rangehangen plus string 1

also so: huhuPADblabla_

was hab ich da falsch gemacht?

Olli 12. Aug 2005 15:02

Re: string aus resource auslesen schlägt fehl...
 
Versuche mal "Length(test1)+1" ... denn ohne die #0 am Ende wird der Rest bis zur ersten #0 noch als Teil des Strings erkannt.

Übrigens ist deine Routine (zum Auslesen) fragwürdig. Erstes Problem: man sollte SetString() benutzen statt einer Zuweisung. Zweite Sache: was passiert wenn der String als 2-Byte-String abgelegt ist (zB Unicode)? Dritte Sache: wenn der String #0 enthält, bekommst du nicht den kompletten String. Den bekämest du nur mithilfe der Länge der Ressource, nicht der Länge des Strings (bei dir implizit vorhanden).

TheGame1492 12. Aug 2005 17:38

Re: string aus resource auslesen schlägt fehl...
 
thx für die hilfe es lag tatsächlich nur an die '+1' ;)

jetzt geht alles


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 Uhr.

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