[求助]为什么无效?
Windows的API里有个检测声卡的函数WaveOutGetNumDevs<br>我一运行,它就提示,无效动态链接在'Winmm.dll'上,这是什么意思,怎么解决?<br>这是声明:<br> function WaveOutGetNumDevs:longint;stdcall;external 'winmm.dll' name 'WaveOutGetNumDevs';<br> function WaveOutGetNumDevs:longint;stdcall;external 'winmm.dll' name 'waveOutGetNumDevs';<br><br>这样写,不那样提示了,可是这个函数好像不起作用,我点检测它没反映我是否装声卡,但是为什么不执行?<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>if WaveOutGetNumDevs=0 then<br>RadioGroup1.ItemIndex:=1<br>else<br>radioGroup1.ItemIndex:=0;<br>end;<br><br>end.<br><br>两选项居中然都没选中,为什么不执行?<br><br><br> 不太明白你的意思。<BR>请问你调试程序了吗? <P>RadioGroup1 用错了<BR></P><P>procedure TForm1.Button1Click(Sender: TObject);<BR>begin<BR> RadioGroup1.Items.Add('有');<BR> RadioGroup1.Items.Add('没有');<BR> // 本来应该在RadioGroup1的Insepctor里设置比较直观的,写在这里你比较好看点。<BR> if WaveOutGetNumDevs=0 then<BR> RadioGroup1.ItemIndex:=1<BR> else<BR> radioGroup1.ItemIndex:=0;<BR>end;<BR>另外WaveOutGetNumDevs返回的是Cardinal不是longint。<BR>见SDK :<BR>/* waveform audio function prototypes */<BR>WINMMAPI UINT WINAPI waveOutGetNumDevs(void);<BR>typedef unsigned int UINT;<BR></P> <P>另外api最好不要直接定义<BR>type <BR> function WaveOutGetNumDevs:Cardinal;stdcall;external 'winmm.dll' name 'waveOutGetNumDevs'; <BR></P>
<P>建议声明和定义 分开方便调试 <BR>type<BR> function WaveOutGetNumDevs():Cardinal;stdcall;<BR>implementation<BR><BR>function WaveOutGetNumDevs; external 'winmm.dll' name 'waveOutGetNumDevs';</P> <P>其实cardinal和longint没关系的,<BR>cardinal是无符号整数,<BR>longint是有符号整数。</P> 赞同,一般api返回的值不会出现溢出的。 嗯,明白了,多谢你们的回答!<br> 嗯,明白了,多谢你们的回答!<br>
页:
[1]
