Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.12;
Скачать: CL | DM;

Вниз

mciSendCommand что неправильно?   Найти похожие ветки 

 
Max_one ©   (2003-10-13 17:27) [0]

Имеется вот такой участок кода
var
Form1: TForm1;
lpOpen:MCI_WAVE_OPEN_PARMS;
dwFlags:Dword;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
AllocMem(SizeOf(lpOpen));
lpOpen.dwCallback := 0;
lpOpen.wDeviceID := 0;
lpOpen.lpstrDeviceType := "waveaudio" ;
lpOpen.lpstrElementName := "C:\1.wav";
lpOpen.lpstrAlias :=nil;
lpOpen.dwBufferSeconds:=256;

dwFlags:= MCI_OPEN_TYPE or MCI_OPEN_ELEMENT or MCI_WAIT or MCI_WAVE_OPEN_BUFFER ;
mciSendCommand(0,MCI_OPEN, dwFlags ,@@lpOpen);

end;
всё это удовольствие выдаёт ошибку :"Variable required"
Может я структуру параметров неправильно задаю?
Тогда как в delphi определять эту структуру?
У меня примеры использования этой функции только на Visual C, там всё работает а тут нет...


 
clickmaker ©   (2003-10-13 18:08) [1]

а зачем 2 собаки @@lpOpen? Одной бы хватило


 
Max_one ©   (2003-10-13 18:19) [2]

тогда он выдаёт ошибку
[Error] Unit13.pas(42): Incompatible types: "Cardinal" and "Pointer"
Понятно почему Cardinal она указана в описании функции, а причём тут Pointer?


 
Е-Моё имя ©   (2003-10-13 18:22) [3]


> а зачем 2 собаки @@lpOpen? Одной бы хватило

евреи, не жалейте заварки! =)


 
Е-Моё имя ©   (2003-10-13 18:22) [4]


> [2] Max_one © (13.10.03 18:19)

a:cardinal
b:pointer

b:=pointer(a);


 
Max_one ©   (2003-10-13 18:40) [5]

Thanks зделал cardinal(@plOpen) зарабо


 
Е-Моё имя ©   (2003-10-13 18:48) [6]


> [5] Max_one © (13.10.03 18:40)
> Thanks зделал cardinal(@plOpen) зарабо

видать все взорвалось =)))))))))


 
Max_one ©   (2003-10-14 13:27) [7]

Рано радовался, ошибку-то перестало выдавать, а играть не играет...
теперь это выглядит вот так:var
Form1: TForm1;
lpOpen:MCI_WAVE_OPEN_PARMS;
lpPlay:MCI_PLAY_PARMS;
lpSet:MCI_SET_PARMS;
dwFlags:Dword;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

lpOpen.wDeviceID := 0;
lpOpen.lpstrDeviceType := "waveaudio" ;
lpOpen.lpstrElementName := "C:\1.wav";
lpOpen.lpstrAlias :=nil;
lpOpen.dwBufferSeconds:=256;

lpPlay.dwFrom:=0;
lpPlay.dwTo:=300;

lpSet.dwTimeFormat:=MCI_FORMAT_MILLISECONDS;
lpSet.dwAudio:=2;

dwFlags:= MCI_OPEN_TYPE or MCI_OPEN_ELEMENT or MCI_WAVE_OPEN_BUFFER ;
mciSendCommand(0,MCI_OPEN, dwFlags ,cardinal(@lpOpen));
mciSendCommand(lpOpen.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,cardinal(@lpSet));
mciSendCommand(lpOpen.wDeviceID,MCI_PLAY, MCI_WAIT ,cardinal(@lpPlay));

end;

помоему dwFrom и dwTo в данномслучае нет необходимости...
но всё равно не играет...

> видать все взорвалось =)))))))))

Потушить успели...


 
clickmaker ©   (2003-10-14 13:32) [8]

Спроси mciGetErrorString(mciSendCommand


 
Max_one ©   (2003-10-14 14:44) [9]

Спрашиваю таким образом

dwError:Dword;
………...
dwError:=mciSendCommand(lpOpen.wDeviceID,MCI_PLAY, MCI_WAIT ,cardinal(@lpPlay));
if mciGetErrorString(dwError,Buff_1,128)=True
then Edit1.Text:=string(Buff_1)
else Edit1.Text:="oblom";
и получаю постоянно облом... код ошибки не распознаётся?


 
Max_one ©   (2003-10-16 21:51) [10]

Ладно разобрался сам, так что если у кто столкнулся с такоё же проблемой, ошибка была в размере буффера, почему-то нельзя задавать его более 10 секунд. А mciGetErrorString()так и не возвратила текстовое описание ошибки, поэтому пришлось открыть модуль и просто смотреть по коду возвращаемого значения от SendCommand.



Страницы: 1 вся ветка

Текущий архив: 2003.12.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
9-36495
Nostradamus
2002-10-08 18:47
2003.12.12
Прорисовка в DelphiX


3-36540
Andrey__
2003-11-20 13:44
2003.12.12
ADO+Access2000+@@identity


1-36600
Clift
2003-12-01 16:06
2003.12.12
Array


1-36702
zapped
2003-12-02 12:17
2003.12.12
Dragging TListItem


6-36797
genek84
2003-10-16 09:32
2003.12.12
как отловить подключение сетевых дисков