Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1451403906
vegarulez
2015-12-29 18:45
2017.12.17
Как вычленить ошибку в программе.


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


2-1452638674
mybass
2016-01-13 01:44
2017.12.17
[dcc32 Error] E2036 Variable required





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский