如何在dll中播放wav?(100分)

  • 主题发起人 主题发起人 唐晓锋
  • 开始时间 开始时间

唐晓锋

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序在动态库中的form的创建里面用到了
mediaplayer1.open;
跟踪到此时就停下来了.
另外,我的dll是原来的项目改的.
我在动态库的输出函数中播放动态库没有声音!
library pro;
uses
....
procedure PlayWav;
begin

MediaPlayer1.Open;
MediaPlayer1.Play;
end;
exports
PlayWav index 1;
begin

Application.CreateForm(....);
end;
 
使用API不行吗?PlaySound
 
我以前用的就是mediaplayer,要改成api时间不允许!
我很急,请帮帮忙!
谢谢!
 
1.按您的FORM上的Mediaplayer的Play按钮,是否能播放?
2.静态连接,不要用DLL,是否能播放?(连接unit,然后调用PlayWav)
3.我也曾经碰到过DLL的问题.我用BCB3做了个DLL,我一调用DLL中
的函数,就引发例外,跟踪却找不到错误.而且,我将DLL的所有文
件连接到工程,同样调用,就完全正常了:(所以:
4.最好不用VCL写DLL.
 
我用动态库是为了避免多余的代码是exe文件太大!
 
用DLL肯定使系统的整个体积加大(EXE+DLL).
因为:
1.如用BPL和Runtime DLL,要带几个1.XXMB的BPL/DLL,系统的总大小肯定增加
2.不用BPL/Runtime DLL,则DLL和EXE都要连接VCL,自然增加总体积.
所以,建议您不用DLL.
 
既然这个问题没有结局,就换一个吧!
那位有封装tapi的控件.
用api拨号的控件(source).
<a href="mailto:xftang@shtdu.edu.cn">Email:xftang@shtdu.edu.cn</a>
谢谢!
 
接受答案了.
 
to tqz:
用mciSendCommand
to huizhang:
要求收回此问题
 
procedure PlayWav;
begin
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

你的mediaplayer1在哪定义的?
 
to Anthoer_eYes:
放在form上的呀!
 
那您的程序有错误(至少你贴出来的)
procedure PlayWav;
<----这是全局函数, 不是类方法
begin
MediaPlayer1.Open;
<----全局变量中并不存在名为Mediaplayer1的变量
MediaPlayer1.Play;
end;
 
我跟踪了一下,执行了,但没有声音,请老兄指点
 
library pro;
uses
....
var
form1 : TForm1;
procedure PlayWav;
begin
form1.MediaPlayer1.Open;
form1.MediaPlayer1.Play;
end;

procedure InitForm;
begin
if not assigned(form1) then
form1 := TForm1.Create(Application);
end;

procedure CloseForm;
begin
if assigned(form1) then
begin
form1.free;
form1 := nil;
end;
end;

exports
PlayWav index 1,
InitForm index 2,
CloseForm index 3;
begin
end;

这样行吗? (先打开, 再放音, 最后关闭)
 
接受答案了.
 
晓刚:
这个问题我还没打算结束呀 :(((((
我连这里太辛苦了,几乎连不上来, :(
 
后退
顶部