Форум: "Начинающим";
Текущий архив: 2017.12.17;
Скачать: [xml.tar.bz2];
Вниз[dcc32 Error] E2036 Variable required Найти похожие ветки
← →
mybass (2016-01-13 01:44) [0]подскажите пожалуйста, использую модуль 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"
что-то и гугл в это позднее время ничего путнего не подсказывает.
← →
mybass (2016-01-13 01:55) [1]получилось объявить метод класса как статику:
class procedure EndSync(handle: HSYNC; channel, data, user: DWORD ); stdcall; static;
не знаю правильно ли..
а вот как получить вместо 8 только эти 4 байта функции без объекта никак что-то не пойму.
← →
mybass (2016-01-13 02:07) [2]может всё же есть какие идеи, как передать в bass не процедуру а метод класса:
procedure TMyPlayer.EndSync(handle: HSYNC; channel, data, user: DWORD ); stdcall;
что бы в этой процедуре я мог обращаться к другим полям этого класса.
тут только одна пользовательская переменная: user: DWORD
BASS_ChannelSetSync(chan, BASS_SYNC_END, 0, @EndSync, user);
если использовать как статик, то и никак не передашь указатель на класс если не отказываться от 64 бита.
← →
icWasya © (2016-01-13 09:20) [3]Как-то так
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
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.12.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.001 c