要从内存中读取一个字符串,字符串最多为9个汉字长,而且是Unicode的
nname:array[0..17] of  WideChar;
ReadProcessMemory (hProcess, Pointer(test), @nname, 18, tt );
    for num:=0 to 17 do begin
    if nname[num]<>'#0' then begin
    nnum:=nnum+1;
    end else begin nnum:=nnum+1; break;
    end;
    end;
Label30.caption :=WideCharLenToString(nname,nnum);我用这个方法读,有时候读出的字符串后面会跟着一些乱码,'#0'判断用在这里不对么...?

解决方案 »

  1.   

    改成这样试试:
    if nname[num] <> #0 then begin
      

  2.   

    if nname[num] <> #0 then begin
    label30.caption:=trim(nname);但结尾有时还是会有小尾巴……
      

  3.   

    实际读取的字节数返回到tt中,tt可能小于18的。
    你直接
    Label30.caption :=WideCharLenToString(nname, tt div 2);
    应该就可以了。
      

  4.   

    nnum := 0;
        for num := 0 to 17 do
        begin
          if nname[num] <> #0 then
            nnum := nnum + 1
          else 
            break;
        end;
        Label30.caption := WideCharLenToString(nname, nnum);
      

  5.   

    刚才看了下tt的值,即使字符串只有5个汉字tt也是18……楼上2位的方法也没成功……字符串是“我来测试di”读出来的结果-->“我来测试di??q”