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.
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.
解决方案 »
- 税控机外挂开发-广东广州
- 使用ADOQuery,可以用Parambyname吗?我的出错啊,帮看看,谢谢了!
- 怎样读取OleVariant类型的 网页头部(Headers)??
- 一条SQL的问题
- 为什么我的程序中有些带码不能执行,纺译没有任何错,但就是纺译不到这句话,我看看没有什么错啊,先谢谢了
- 求教用creat table 实现明细型字段的语法?
- 请问有无Delphi COM/ActiveX高手?
- 请教一个精确动态查询,查询条件有:
- 如何将VFP的dbf表转换成*.db表。
- 如何用SQL的UPDATE修改数据库(带参数)
- 请教一个存储过程的问题。
- >>请问最新版的,网上哪儿可以下载?? <<
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;
更不行了,加上的这一行编译报错:
constant object can not be passed as var parameter
原来我在其他机器上试过我最上面的那段代码,
能够很好的读到值,(返回的是很干净的pchar),
换了这种方法,返回的是你指定长度的字符串,但是中间长度不足的部分都被用#0填充了,
怎么把这样的字串整形回来呢
比如
我的.ini 中的值为'font'
现在返回的是'font'#0#0#0#0#0#0#0#0...#0#0#0#0
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;
很好,不过现在才发现原来Delphi中已经提供了一个TIniFile类可以来处理这些东西