编程论坛's Archiver

青格儿 发表于 2007-10-21 14:52

[求助]为什么无效?

Windows的API里有个检测声卡的函数WaveOutGetNumDevs<br>我一运行,它就提示,无效动态链接在'Winmm.dll'上,这是什么意思,怎么解决?<br>这是声明:<br> function  WaveOutGetNumDevs:longint;stdcall;external 'winmm.dll' name 'WaveOutGetNumDevs';<br>

青格儿 发表于 2007-10-21 15:14

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>

volte 发表于 2007-10-22 13:09

不太明白你的意思。<BR>请问你调试程序了吗?

anthony634 发表于 2007-10-22 13:39

<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>

anthony634 发表于 2007-10-22 13:45

<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>

volte 发表于 2007-10-22 19:03

<P>其实cardinal和longint没关系的,<BR>cardinal是无符号整数,<BR>longint是有符号整数。</P>

anthony634 发表于 2007-10-22 20:14

赞同,一般api返回的值不会出现溢出的。

青格儿 发表于 2007-10-24 20:58

嗯,明白了,多谢你们的回答!<br>

青格儿 发表于 2007-10-24 21:04

嗯,明白了,多谢你们的回答!<br>

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.