Форум: "WinAPI";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c