Range check error na Win 98

0

Witajcie !

Ostatnio użytkownicy systemu Windows 98 zaczęli zgłaszać mi pojawianie się błędu "Range check error" podczas używania jednego z moich programów.
Przeanalizowałem dokładnie moment, w którym pojawia się ten błąd oraz zmiany jakie wprowadziłem w programie od czasu ostatniej jego wersji. Wcześniejsza bowiem wersja nie powodowała pojawiania się tego komunikatu.
Najbardziej prawdopodobną przyczyną jest ten oto kawałek kodu:

  
  h := FindWindow(nil, 'Tytuł okna aplikacji');
  if h <> 0 then
  begin
    error_message := GetMessageBoxTextFromTitle('Tytuł okna aplikacji');
    PostMessage(h, WM_QUIT, 0, 0);
  end;

Kod ten ma za zadanie sprawdzić czy w danym momencie obecne jest okno pewnej zewnętrznej aplikacji powiązanej z moim programem. W razie obecności tego okna ma ono zostać zamknięte, a treść tego okna ma zostać umieszczona w zmiennej error_message.
Poniżej zaś deklaracja funkcji GetMessageBoxTextFromTitle:

function GetMessageBoxTextFromTitle(as_Title: String): WideString;
var
  li_Handle  : integer ;
  li_Identifier : integer; 
  ll_ret     : longint   ;
  lul_Size   : ulong     ;
  lpc_Text   : PChar     ; 
  lc_Buffer  : Array[0..255] of Char;
  ls_Text    : String  ;
begin 
  // Set Variables
  ls_Text := '';
  li_Identifier := 65535; 
  lul_Size := 255; 
  getMem(lpc_Text, lul_Size);
  // get the WindowHandle 
  li_Handle := FindWindow(PChar(0), StrPCopy(lc_Buffer, as_Title));
  if li_Handle > 0 then
  begin 
    // If Window found, get Text of Messagebox 
    ll_ret := GetDlgItemText(li_Handle, li_Identifier, lpc_Text, lul_Size);
    if ll_ret > 0 then 
    begin 
      ls_Text := trim(lpc_Text);
    end;
  end;
  getMessageBoxTextFromTitle := ls_Text;
end;

Dziwi mnie fakt, że na innych systemach operacyjnych, włączając w to Windows Vista a także linuksowy emulator Windows błąd ten się nie pojawia.

Będę wdzięczy na Wasze wskazówki i głosy w dyskusji.

0

Pozamieniaj wszędzie integer na LongInt. Kiedyś miałem problem, że na jdenym kompie Integer był 16b, na innym 32b. Może to wystarczy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1