看看这个问题,关于指针的。
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结构的长度?但似乎不是长度的错。