出错的行在system单元的LoadResString函数中;function LoadResString(ResStringRec: PResStringRec): string;
var
  Buffer: array [0..1023] of char;
begin
  if ResStringRec = nil then Exit;
  if ResStringRec.Identifier < 64*1024 then
    SetString(Result, Buffer,                               // error line
      LoadString(FindResourceHInstance(ResStringRec.Module^),
        ResStringRec.Identifier, Buffer, SizeOf(Buffer)))              
  else
    Result := PChar(ResStringRec.Identifier);
end;请问是什么原因出现这种错误?

解决方案 »

  1.   

    在什么情况下会用到LoadResString函数,我的程序中没有调用,怎么判断调用来源
      

  2.   

    The Win32 program loader sets up the first 64k of process address space
     with no read or write access, to help detect use of invalid pointers
      (whose integer value is 0..64k)
      

  3.   

    function LoadResString(ResStringRec: PResStringRec): string;
    var
      Handle: TResourceHandle;
      Tab: ^ResStringTable;
      ResMod: HMODULE;
    begin
      if ResStringRec = nil then Exit;
      ResMod := FindResourceHInstance(ResStringRec^.Module^);
      Handle := FindResource(ResMod,
           PChar(ResStringRec^.Identifier div ResStringTableLen),
           PChar(6));   // RT_STRING
      Tab := Pointer(LoadResource(ResMod, Handle));
      if Tab = nil then
        Result := ''
      else
      begin
        Result := PWideChar(PChar(Tab) + Tab[ResStringRec^.Identifier mod ResStringTableLen]);
      end;
    end;这个不就是系统定义的吗?你按照这个写不行了