Entwickler-Ecke

Windows API - Problem mit Stringresourcen...


FriFra - Mo 29.08.05 23:23
Titel: Problem mit Stringresourcen...
Ich habe mir eine Funktion geschrieben, die mir eigentlich die höchste ID meiner Stringresourcen liefern sollte...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
  function GetMaxResID: integer;
  var
    Buffer: array[0..MAX_PATH] of Char;
    n: integer;
  begin
    for n := 0 to 9999 do
    begin
      if Loadstring(hinstance, n, @buffer, MAX_PATH) = 0 then
      begin
        if GetLastError <> ERROR_SUCCESS then
          break
        else
          Result := n;
      end
      else
        Result := n;
    end;
  end;


Diese Funktion tut es allerdings nicht, weil GetLastError offensichtlich sehr unzuverlässig ist :evil: :roll:

Die Funktion liefert mir bei realen 163 Strings "abwechselnd" (unregelmäßig) 162 (korrekt) und 175 :gruebel:


ManuelGS - Fr 09.09.05 02:25

Bin zwar gerade im Halbschlaf, aber probier mal so:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function GetMaxResID: integer;
  var
    Buffer: array[0..MAX_PATH] of Char;
    n: integer;
  begin
    n:=-1;
    repeat inc(n);
      until (loadstring(hinstance,n,@buffer,max_path) = 0)
        and (getlasterror<>ERROR_SUCCESS);
    result:=n+1;
  end;



Das Prob. könnte leich an max_path liegen. Überprüf mal den Wert, wenn die Funktion startet.