这两个函数是实现以2进制形式往注册表中写字符串,现在程序是正确的(大写的标示符都是常量不用管)。我有一点不明白。在函数WriteSn中,如果我不声明ary,并去掉与之相关的语句,把here1的内容换为here2的内容,那么往注册表中写操作就没有成功,得到的是乱码。而现在就是成功的。我认为声明ary是多余的。谁能帮我指点一下呢,谢谢。//往注册表中写p值
function WriteSn(p:PChar):boolean;
var
reg:TRegistry;
ary:array[0..KEY_LEN-1] of char;
begin
reg := TRegistry.Create;
reg.RootKey := ROOT_KEY;
reg.OpenKey( KEY_PATH, true );
ZeroMemory( @ary, KEY_LEN );
StrCopy( ary, p );
reg.WriteBinaryData( KEY_NAME, ary, KEY_LEN ); //<-----here1 {reg.WriteBinaryData(KEY_NAME, p, KEY_LEN)} //<------here2 reg.CloseKey();
reg.Free;
end;//调用WriteSn往注册表中写Edit1.text的内容
procedure TForm1.Button1Click(Sender: TObject);
var
ary:array[0..KEY_LEN-1] of char;
begin
StrPCopy( ary, edit1.Text );
WriteSn( ary );
end;
function WriteSn(p:PChar):boolean;
var
reg:TRegistry;
ary:array[0..KEY_LEN-1] of char;
begin
reg := TRegistry.Create;
reg.RootKey := ROOT_KEY;
reg.OpenKey( KEY_PATH, true );
ZeroMemory( @ary, KEY_LEN );
StrCopy( ary, p );
reg.WriteBinaryData( KEY_NAME, ary, KEY_LEN ); //<-----here1 {reg.WriteBinaryData(KEY_NAME, p, KEY_LEN)} //<------here2 reg.CloseKey();
reg.Free;
end;//调用WriteSn往注册表中写Edit1.text的内容
procedure TForm1.Button1Click(Sender: TObject);
var
ary:array[0..KEY_LEN-1] of char;
begin
StrPCopy( ary, edit1.Text );
WriteSn( ary );
end;
解决方案 »
- 网络打印问题?用打印服务器
- 在程序中把多个不同的元素比如:文本,图片,声音保存到一个文件中,然后再读出来!
- 如何获取别的应用程序中listview控件的数据
- 服务端怎么发信息给指定的socket?
- 我怎么就那么笨呢!都3个月了!delphi还是没学会!问题一大堆!心情不爽!散分!
- 如何在一个窗体里调用另一个窗体Private下的过程? ?
- 求助,;关于把Treeview结构保存到数据库里面的问题
- ?书!!!
- 怎样用wordapplication来打开一份word文档?
- 请问我已经有两条直线(三个点!起点是一样的)!现在已经得到了任意夹角的角度了!
- 为何DisableControls没有起作用?
- 一个动态创建RAVE报表的例子程序
2、修改函数:function WriteSn(var ary: Tary):boolean; 使用:
reg.WriteBinaryData( KEY_NAME, ary, KEY_LEN ); //<-----here13、发调函数:
procedure TForm1.Button1Click(Sender: TObject);
var
ary:Tary;
begin
StrPCopy( ary, edit1.Text );
WriteSn( ary );
end;
我的理解是PChar传的是地址,而调用WriteSn时的p是分配了空间的,那么在WriteSn函数中就可以那样用了,而不需要ary了。但不知为什么不行,哪位高手可以讲讲原理吗,先睡觉,明天结贴。
还有就是传个array类型的也可以呀。