crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 29.3.2024, 17:56