Delphi6.0中调用Windows api读写.ini文件。procedure TForm1.Button5Click(Sender: TObject);
var
    Rvalue : PChar;
    RInt : Cardinal;
    sectionName,keyName,defaultValue : PChar;
begin
    Rvalue := 'curinor';
    sectionName := 'section1';
    keyName := 'font';
    defaultValue := '';   
 
    WritePrivateProfileString(sectionName,keyName,Rvalue,'D:\test.ini'); // part 1
    
    GetPrivateProfileString(sectionName,keyName,defaultValue,Rvalue,100,'D:\test.ini'); // part 2
    Edit1.Text := Rvalue;
end;在Part 1处往.ini文件中写字段是对的,但是在Part 2处读取该字段时报如下错误,该如何解决。Access violation at address 77E71A5D in module 'kernel32.dll'. write of address 00500EFC.

解决方案 »

  1.   

    试试在GetPrivateProfileString前面加一句setlength(rvalue,10);
      

  2.   

    不对,rvalue是pchar;试试下面
    procedure TForm1.Button5Click(Sender: TObject);
    var
        Rvalue : PChar;
        RInt : Cardinal;
        sectionName,keyName,defaultValue : PChar;
        rvalue1:string;
    begin
        Rvalue := 'curinor';
        sectionName := 'section1';
        keyName := 'font';
        defaultValue := '';   
     
        WritePrivateProfileString(sectionName,keyName,Rvalue,'D:\test.ini'); // part 1
        setlength(rvalue1,100)
        GetPrivateProfileString(sectionName,keyName,defaultValue,pchar(Rvalue1),100,'D:\test.ini'); // part 2
        Edit1.Text := Rvalue1;
    end;
      

  3.   

    to  netwolfds(晓竹) :
    更不行了,加上的这一行编译报错:
    constant object can not be passed as var parameter
      

  4.   

    好像这个方法也不是很好,
    原来我在其他机器上试过我最上面的那段代码,
    能够很好的读到值,(返回的是很干净的pchar),
    换了这种方法,返回的是你指定长度的字符串,但是中间长度不足的部分都被用#0填充了,
    怎么把这样的字串整形回来呢
    比如
    我的.ini 中的值为'font'
    现在返回的是'font'#0#0#0#0#0#0#0#0...#0#0#0#0
      

  5.   

    用TIniFile类吧,简单好用,IniFiles单元
      

  6.   

    试试    
        Rvalue := 'curinor';
        sectionName := 'section1';
        keyName := 'font';
        defaultValue := '';    WritePrivateProfileString(sectionName,keyName,Rvalue,'D:\test.ini'); // part 1
        try
          getmem(rvalue,100);
          GetPrivateProfileString(sectionName,keyName,defaultValue,rvalue,100,'D:\test.ini'); // part 2
          Edit1.Text := Rvalue;
        finally
          freemem(rvalue);
        end;
      

  7.   

    OK乐,
    很好,不过现在才发现原来Delphi中已经提供了一个TIniFile类可以来处理这些东西