我现在只解决了正确显示字符串的问题:var hRes:Thandle;
//    pRes: pointer; ***************
    pRes:  Cardinal;
    ResSize:integer;
    i:integer;
    {$IFDEF WIN32}
    s:shortstring;
    {$ELSE}
    s:string;
    {$ENDIF}
begin
  hRes:=FindResource(hInstance,'MYUSERDATA','MYDATATYPE');
  if hRes=0 then
    begin
      showMessage('没有找到资源文件!');
      exit;
    end;
  ResSize:=SizeOfResource(hinstance,hRes);
  if ResSize=0 then
    begin
      showmessage('没有装载任何资源!');
      exit;
    end;
//  pRes:=LockResource(hRes); ****************
  pRes:=LoadResource(hInstance, hRes);
  if pRes=0 then
    begin
      showmessage('资源装载失败!');
      FreeResource(pRes);
      exit;
    end;  s:='';
  i:=0;
  while(i<ResSize) do
//  while pChar(p1)[i]<>'!' do ************
    begin
      s:=s+pChar(pRes)[i];
      inc(i);
    end;  showMessage(s);
//  UnLockResource(hRes); *************
  FreeResource(pRes);
end;
另外,你提供的文本中无!,有怎能以!为结束标记?