解决方案 »
- 如何给外部程序添打补丁,添加一个菜单项,并能调用
- 如何将2个ADOQuery连接不同数据库所得结果显示在一个DBGRID中?
- COM高手帮助解决一下
- edit组件中显示的文字,如何让它居中或者居右对齐啊!
- 单机系统里使用clientdataset,form1里的clientdataset,如何引用form2里的DataSetProvider
- 那位大虾来帮我一下呀,急死了!!!!!
- 无标题栏窗口,应该怎么响应一个按钮的事件,使窗口最小化到任务栏上?
- 我的触发器为什么没用?
- 请问:怎样才能从数据库中取出N天之内的数据?分很好拿吧!
- 查询一张表所得结果存到同一个数据库另一张表中,来不成功!!??
- delphi2010 move问题
- 背景为黑色的BMP图片,黑色怎样才能透明
newlpBuffers.buf 是pchar内型,也要先分配内存var
tmp: AnsiString;
newlpBuffers: LPWSABUF;
begin
tmp := '1234567989';
New(newlpBuffers);
newlpBuffers.len := Length(tmp);
newlpBuffers.buf := '123456789';
var
tmp: AnsiString;
newlpBuffers: LPWSABUF;
begin
tmp := '1234567989';
New(newlpBuffers);
newlpBuffers.len := Length(tmp);
Move(tmp[1], newlpBuffers.buf^, newlpBuffers.len); //这儿赋值出错...
ShowMessage(newlpBuffers.buf^);
Dispose(newlpBuffers);
end;还是报错
设置 tmp长度有何用
WSABUF = record
len: u_long; { the length of the buffer }
buf: PAnsiChar; { the pointer to the buffer }
end;
{$NODEFINE TWSABuf}
TWSABuf = WSABUF;
{$NODEFINE PWSABuf}
PWSABuf = ^TWSABuf;
{$EXTERNALSYM LPWSABUF}
LPWSABUF = PWSABUF;
Move(tmp[1], newlpBuffers.buf^, newlpBuffers.len); //这儿赋值出错...
这样要先给newlpBuffers.buf分配内存
GetMem(newlpBuffers.buf, newlpBuffers.Len);要不你就直接赋值
newlpBuffers.buf := '123456';
申请内存后如果newlpBuffers.buf长度改变了应该再怎样申请内存呢重新申请?
二、New分配的内存必须由Dispose来释放;GetMem分配的内存必须由FreeMem来释放;
三、New根据指针类型来自动计算需要分配的内存尺寸;GetMem必须指定尺寸;
因此,对于类型指针,一般用New和Dispose来进行管理;对于内存尺寸随机的指针(典型地如PChar),一般用GetMem和FreeMem来进行管理。从另一方面来说,在很多时候用哪一对例程都可以进行动态内存管理。
上一贴已有具体说明。