powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ошибка при вызове функции
8 сообщений из 8, страница 1 из 1
ошибка при вызове функции
    #34388908
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
использую стороннюю библиотеку. В мануале описана такая функция
Код: plaintext
1.
2.
3.
4.
5.
6.
HSYNC BASS_ChannelSetSync(
    DWORD handle,
    DWORD type,
    QWORD param,
    SYNCPROC *proc,
    DWORD user
);
где SYNCPROC *proc - это пользовательская функция
Код: plaintext
1.
2.
3.
4.
5.
void CALLBACK YourSyncProc(
    HSYNC handle,
    DWORD channel,
    DWORD data,
    DWORD user
);

Почему если описано так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void CALLBACK EndPlay(HSYNC handle, DWORD channel, DWORD data, DWORD user)
{
...
}

DWORD CPlayer::Play(CString sFile)
{
	BASS_ChannelSetSync(chan, BASS_SYNC_END|BASS_SYNC_MIXTIME,  0 , EndPlay, (DWORD) this);
...
}

все работает, а если функция описана
Код: plaintext
1.
2.
3.
void CALLBACK CPlayer::EndPlay(HSYNC handle, DWORD channel, DWORD data, DWORD user)
{
...
}

то получаю ошибку компилятора
авторerror C3867: 'CPlayer::EndPlay': function call missing argument list; use '&CPlayer::EndPlay' to create a pointer to member
...
Рейтинг: 0 / 0
ошибка при вызове функции
    #34388969
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дед Макар
[src с++]
void CALLBACK CPlayer::EndPlay(HSYNC handle, DWORD channel, DWORD data, DWORD user)
{
...
}[/src]
Не прокатит, если метод класса не статический. При вызове "не статических" методов, в списке аргументов неявно присутствует указатель this, так что она вряд ли подойдет...

все работает, а если функция описана
Код: plaintext
1.
2.
3.
void CALLBACK CPlayer::EndPlay(HSYNC handle, DWORD channel, DWORD data, DWORD user)
{
...
}

дед Макар
то получаю ошибку компилятора
авторerror C3867: 'CPlayer::EndPlay': function call missing argument list; use '&CPlayer::EndPlay' to create a pointer to member
Для того, чтобы взять указатель на метод класса, в VisualStudio 2005 в функции, где передается калбэк "CPlayer::EndPlay" не пройдет, нужно писать "&CPlayer::EndPlay", как в сообщении и указано. Только эта функция вряд ли подойдет под callback для bass.dll ;)
...
Рейтинг: 0 / 0
ошибка при вызове функции
    #34389196
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"&CPlayer::EndPlay" конечно же не прошло. А вот указание
Код: plaintext
static void CALLBACK CPlayer::EndPlay(HSYNC handle, DWORD channel, DWORD data, DWORD user)
в корне все изменило в лучшую сторону :). Спасибо.
...
Рейтинг: 0 / 0
ошибка при вызове функции
    #34490676
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и снова к нашим баранам.
Задача изменилась. И функция CPlayer::EndPlay как static меня никак не устраивает. Есть способ как от этого избавится?
...
Рейтинг: 0 / 0
ошибка при вызове функции
    #34490687
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дед Макари снова к нашим баранам.
Задача изменилась. И функция CPlayer::EndPlay как static меня никак не устраивает. Есть способ как от этого избавится?

Нет. Но в одном из параметров можешь передать ей указатель на свой класс.
...
Рейтинг: 0 / 0
ошибка при вызове функции
    #34490769
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так все правильно ты должен сделать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
static void CALLBACK EndPlay(HSYNC handle, DWORD channel, DWORD data, DWORD user)
{
  ((CPlayer*)user)->EndPlay(handle, channel, data);
}

DWORD CPlayer::Play(CString sFile)
{
  BASS_ChannelSetSync(chan, BASS_SYNC_END|BASS_SYNC_MIXTIME,  0 , EndPlay, (DWORD) this);
...
}

void CALLBACK CPlayer::EndPlay(HSYNC handle, DWORD channel, DWORD data)
{
...
}
...
Рейтинг: 0 / 0
ошибка при вызове функции
    #34491340
дед Макар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дык вроде ж из статических функций можно обращаться только к статическим функциям и/или переменным?
...
Рейтинг: 0 / 0
ошибка при вызове функции
    #34492485
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отовсюду можно обращаться ко всему, что в поле видимости.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ошибка при вызове функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]