动态数组?指针?俺乱了(200分)

  • 主题发起人 主题发起人 Kule
  • 开始时间 开始时间
K

Kule

Unregistered / Unconfirmed
GUEST, unregistred user!
根据需要,向注册表中写入二进制数值,但是该数值的大小是不定的,
所以想通过动态Byte数组实现(Buf_input)
现在问题是,动态数组是一个指针直接用WriteBinaryData不行
怎么办?
我已经尝试国用WriteBinaryData('',pointer(buf_input)^,size)来实现,可是通过
但是会出现invilde pointer operation 错误(),我知道肯定是指针的问题,但如何解决
望高手赐教,分数好商量
 
var
buf:array of byte;
begin
....
SetLength(buf,Size);
....
reg.WriteBinaryData('BinData',buf[0],Size);
....
end;

不过好像对于默认值,只能是string类型?
 
就是呵,你一定要去碰''吗?
 
问题的由来是这个样子的:

我想在程序中实现ie代理服务器的改变
那么除了改变'proxyserver'之外还要改变DefaultConnectionSettings(二进制)
我没说错把
 
不是的,宝兰一直声称DELPHI不要用指针来实现,可是
很多地方都用到了指针,只不过,变了一个花样。
所以,你自己写POINT()是不可以的,而要通过buf来转化
就是说,先把数据写进buf然后,再在
reg.WriteBinaryData('BinData',buf[0],Size);
用buf标识,其实动态数组,表面看没有指针,实际上,
就是一个变态指针。你跟踪类型,就可以看到了。

 
To LoveFox:
reg.WriteBinaryData('BinData',buf[0],Size);
^^^^^^ 为什么这么用?

还有我按这上面说的改了,可是在程序退出是,还是汇报错
 
Kingron的方法没错,其实动态数组合固定长度数组的区别是:动态数组的变量名,如buf
其实是指向静态数组的指针,因此Buf[0]就相当于 var buff: array[0..size-1]of byte的
buff。

我试过了,程序没错,可能在其他的地方有问题。
另外,WriteBinaryData好像只能写小于2K的数据
 
使用:
WriteBinaryData('',buf_input^,size)

我碰到过类似的问题,是在读写文件的时候,定义Buffer使用了PChar
var
buffer : PChar

当我读文件时,最初通过 ReadFile(hFile, Buffer, size, nil) 得不到正确的结果
后来改为 ReadFile(hFile, Buffer^, size, nil) 正确,

我想,问题还是在于对指针的理解上
 

还等什么,快给Kingron和lovefox加分吧!!!

赫赫!!!我也沾点光,应该可以吧^_^ ^_^ !!!

 
程序我已经按照上面的改了,在家中的机器上运行毫无问题
但是同样的程序拿到单位运行还是会出现指针错误,这是为什么,
难道真的物理内存有关?不会吧!!!

最后疑问,马上发分
 
应该是注册表内容不同的关系,你应该先查询是否已经建立,然后
根据结果修改或者创建
 
一定是你的缓冲区的长度计算有错误!
 
多人接受答案了。
 
后退
顶部