![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
[dcc32 Error] E2036 Variable required
mybass © (2016-01-13 01:44:00)подскажите пожалуйста, использую модуль bass для проигрывания мп3.
процедура описана как:
SYNCPROC = procedure(handle: HSYNC; channel, data: DWORD; user: Pointer);stdcall;
описал у себя её так же само.
procedure EndSync(handle: HSYNC; channel, data, user: DWORD ); stdcall;
begin
//
end;
..
BASS_ChannelSetSync(chan, BASS_SYNC_END, 0, @EndSync, 0);
работает нормально.
но если помещаю это всё в класс, то не могу назначить эту процедуру.
procedure TPlayer.EndSync..
...
procedure TPlayer.Play;
BASS_ChannelSetSync(chan, BASS_SYNC_END, 0, @EndSync,0);
[dcc32 Error] E2036 Variable required
если без собачки указать EndSync, то ошибка:
E2009 Incompatible types: 'regular procedure and method pointer'
что-то и гугл в это позднее время ничего путнего не подсказывает.
icWasya (2016-01-13 09:20:00) [1]Как-то так
type TPlayer=class
procedure EndSync(handle: HSYNC; channel, data: DWORD);
end;
implementation
procedure EndSync_CallBack(handle: HSYNC; channel, data, user: DWORD ); stdcall;
var Player:TPlayer;
begin
Player:=TPlayer(user);
Player.EndSync(handle, channel, data);
end;
procedure TPlayer.Play;
begin
....
BASS_ChannelSetSync(chan, BASS_SYNC_END, 0, EndSync_CallBack, Self);
end;
Работать будет только на x86-32
mybass (2016-01-13 02:07:00) [2]может всё же есть какие идеи, как передать в bass не процедуру а метод класса:
procedure TMyPlayer.EndSync(handle: HSYNC; channel, data, user: DWORD ); stdcall;
что бы в этой процедуре я мог обращаться к другим полям этого класса.
тут только одна пользовательская переменная: user: DWORD
BASS_ChannelSetSync(chan, BASS_SYNC_END, 0, @EndSync, user);
если использовать как статик, то и никак не передашь указатель на класс если не отказываться от 64 бита.
mybass (2016-01-13 01:55:00) [3]получилось объявить метод класса как статику:
class procedure EndSync(handle: HSYNC; channel, data, user: DWORD ); stdcall; static;
не знаю правильно ли..
а вот как получить вместо 8 только эти 4 байта функции без объекта никак что-то не пойму.