看看这个问题,关于指针的。

8341 2002-07-27 09:54:47
这里有ACMWAVE控件,不过问题不在这里,似乎在于对指针的赋值。

uses 处加上mmsystem

procedure TForm1.Button1Click(Sender: TObject);
var
a:pWAVEFORMATEX;

begin

a:=allocmem(30);

a.wFormatTag:=49;
a.nChannels:=1;
a.nSamplesPerSec:=8000;
a.nAvgBytesPerSec:=1625;
a.nBlockAlign:=65;
a.wBitsPerSample:=0;
a.cbSize:=2;

ACMWaveIn1.Open(a); //这里出错 ‘problem creating record handle32’
ACMWaveout1.Open(a); //这里也出错 同上。
freemem(a);
end;
以上这段出错,但是下面就可以:

procedure TForm1.Button1Click(Sender: TObject);
var
a:pWAVEFORMATEX;

begin
a:=ACMDialog1.OpenDialog;

showmessage(inttostr(a.wFormatTag)); //显示49
showmessage(inttostr(a.nChannels)); //显示1
showmessage(inttostr(a.nSamplesPerSec)); //显示8000
showmessage(inttostr(a.nAvgBytesPerSec)); //显示1625
showmessage(inttostr(a.nBlockAlign)); //显示65
showmessage(inttostr(a.wBitsPerSample)); //显示0
showmessage(inttostr(a.cbSize)); //显示2

ACMWaveIn1.Open(a); 正确执行
ACMWaveout1.Open(a); 正确执行

end;
而第二个程序所显示的,又与第一个程序所输入的完全相同啊!
大家看看哪里有错?第一段的指针申请内存长度我改成60也出错,如何改成pWAVEFORMATEX结构的长度?但似乎不是长度的错。
...全文
43 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
stick77 2002-07-28
  • 打赏
  • 举报
回复
改成
pWAVEFORMATEX(a)^.wFormatTag:=49;
...
...
...
ACMWaveIn1.Open(pWAVEFORMATEX(a)^);
ACMWaveout1.Open(pWAVEFORMATEX(a)^);
8341 2002-07-27
  • 打赏
  • 举报
回复
tui
8341 2002-07-27
  • 打赏
  • 举报
回复
hjd_cw 2002-07-27
  • 打赏
  • 举报
回复
是啊,用 new 试试吧。
yansea 2002-07-27
  • 打赏
  • 举报
回复
没多看,不过在为某个结构分配内存时,因为编译器知道要分配的内存的大小,所以调用New()就能分配到所需的字节。取消用dispose。
8341 2002-07-27
  • 打赏
  • 举报
回复
tui

5,387

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧