crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в BASS, Qt и CALLBACK функция
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
urandom Дата 28.1.2012, 22:56
  Еще раз спасибо)
Думаю, весь проект поверг бы вас в ужас..

Пошел учить матчасть ._.
BRE Дата 28.1.2012, 22:52
  Можно так, а можно используя указатель и длину создать QByteArray, ну и дальше... хочешь через write, хочешь через QDataStream.
urandom Дата 28.1.2012, 22:42
  Да, да, тупанул ><
Только как мне тогда записать данные в QFile?..

parent->trackFile->write((char*)buffer, length);

так?.
BRE Дата 28.1.2012, 22:31
 
Цитата(urandom @ 28.1.2012, 23:26) *
Работает, причем отлично. Зачем мне там length?..

Ну он же тебе не строки передает, а бинарные данные. И length, как раз, показывает длину этих данных. Нет?
urandom Дата 28.1.2012, 22:26
  эмм, а не должно? х)
Работает, причем отлично. Зачем мне там length?..
BRE Дата 28.1.2012, 22:22
  И работает?
А почему ты от length отказался?
urandom Дата 28.1.2012, 21:20
 
void BASS::downproc(const void *buffer, DWORD length, void *user)
{
    Q_UNUSED(length);
    Q_ASSERT(user);

    BASS *parent = static_cast<BASS *>(user);

    if (!parent->trackFile->isOpen()) {
        parent->trackFile->setFileName(parent->trackFileName);
        parent->trackFile->open(QFile::WriteOnly);
    }

    if (!buffer) {
        parent->trackFile->close();
    } else {
        QDataStream stream(parent->trackFile);
        stream << buffer;
    }

}


Вот такой вот ужос вышел х)
Спасибо)
BRE Дата 28.1.2012, 14:41
 
class MyClass
{
public:

    void setCallback( const QUrlg &url )
    {
        BASS_StreamCreateURL( url.toAscii(), 0, 0, &downproc, this );
    }

protected:
    static void CALLBACK downproc(const void *buffer, DWORD length, void *user)
    {
        Q_ASSERT( user );
        MyClass *ptr = static_cast<MyClass*>( user );
        // ptr указывает на объект класса
    }
};

urandom Дата 28.1.2012, 14:18
  Возможно, те кто работал с BASS в Qt уже сталкивались с подобной проблемой.
В общем мне надо сохранить воспроизводимый BASS'ом трек. Для этого у BASS есть CALLBACK функция. В ее параметрах BASS передает кусками трек, который в последствии мне необходимо сохранить в файл.
Проблема заключается в том, что мне необходимо использовать эту функцию непосредственно внутри класса, а BASS требует сделать ее статической. Т.е.:
static void CALLBACK downproc(const void *buffer, DWORD length, void *user);
...
BASS_StreamCreateURL(url.toAscii(), 0, 0, &downproc, 0);

Все работает, но я не могу работать с методами и переменными класса.

void CALLBACK downproc(const void *buffer, DWORD length, void *user);
...
BASS_StreamCreateURL(url.toAscii(), 0, 0, &BASS::downproc, 0);

Не работает, ибо:
Цитата
cannot convert 'void (BASS::*)(const void*, DWORD, void*)' to 'void (*)(const void*, DWORD, void*) ...


Можно ли заставить BASS работать с нестатической функцией?
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 13:20