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

Вниз

[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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.003 c
2-1452638674
mybass
2016-01-13 01:44
2017.12.17
[dcc32 Error] E2036 Variable required


3-1316003811
PrincNochi
2011-09-14 16:36
2017.12.17
PopupMenu заполняемый из БД Access


2-1451403906
vegarulez
2015-12-29 18:45
2017.12.17
Как вычленить ошибку в программе.