Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Visual Studio 2010 и WaveInOpen 
:(
    Опции темы
lexin1990
Дата 11.7.2012, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.7.2012

Репутация: нет
Всего: нет



Здравствуйте!


Код

...........
..........
void CALLBACK waveInProc(
            HWAVEIN hwi,      
            UINT uMsg,        
            DWORD dwInstance,  
            DWORD dwParam1,    
            DWORD dwParam2)
        {
        } 
.............
.............
waveInOpen(&hwi, wDeviceID, &wfmt, (DWORD) waveInProc, 0, CALLBACK_FUNCTION);
.................
.................


на строке waveInOpen вылазит две ошибки 


1) приведение типов: невозможно преобразовать "void (__clrcall *)(HWAVEIN,UINT,DWORD,DWORD,DWORD)" в "DWORD"
2) невозможно получить адрес "Silence::Form1::waveInProc", пока не будет создан экземпляр делегата

все это происходит в VS 2010.. 
первое понятно что преобразование типов не получается но по идее waveInOpen должен получать в то значение только имя функция которая будет обрабатывать калбак...
про вторую ошибку - вообще не понятно. у меня вообще нет классов, для чего делегат ей?


помогите пожалуйста... вообще можно попробовать поменять компилятор на другой, но это легкий путь решения проблемы
PM MAIL   Вверх
Alexeis
Дата 11.7.2012, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



Попробуйте привести к (DWORD_PTR) . Возможно нужно взять адрес функции.
Код

waveInOpen(&hwi, wDeviceID, &wfmt, (DWORD_PTR) &waveInProc, 0, CALLBACK_FUNCTION);




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lexin1990
Дата 11.7.2012, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.7.2012

Репутация: нет
Всего: нет



Цитата(Alexeis @ 11.7.2012,  14:03)
Попробуйте привести к (DWORD_PTR) . Возможно нужно взять адрес функции.
Код

waveInOpen(&hwi, wDeviceID, &wfmt, (DWORD_PTR) &waveInProc, 0, CALLBACK_FUNCTION);

error C2276: &: недопустимая операция с выражением привязанной функции-члена

PM MAIL   Вверх
Alexeis
Дата 11.7.2012, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



Цитата(lexin1990 @  11.7.2012,  17:45 Найти цитируемый пост)
error C2276: &: недопустимая операция с выражением привязанной функции-члена

  Так и нельзя функцию класса передавать вместо обычной функции. У нее же 1й аргумент неявный.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lexin1990
Дата 11.7.2012, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.7.2012

Репутация: нет
Всего: нет



Цитата(Alexeis @ 11.7.2012,  17:35)
Цитата(lexin1990 @  11.7.2012,  17:45 Найти цитируемый пост)
error C2276: &: недопустимая операция с выражением привязанной функции-члена

  Так и нельзя функцию класса передавать вместо обычной функции. У нее же 1й аргумент неявный.

Код

waveInOpen(&hwi, wDeviceID, &wfmt, (DWORD) Form1::*waveInProc ,0, CALLBACK_FUNCTION);


error C2059: синтаксическая ошибка: <tag>::*

чето я конкретно засел на какой то ерунде( 
сначала думал делать через делегата, но потом понял что это не то что нужно...
PM MAIL   Вверх
Alexeis
Дата 11.7.2012, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



Цитата(lexin1990 @  11.7.2012,  20:35 Найти цитируемый пост)
error C2059: синтаксическая ошибка: <tag>::*

чето я конкретно засел на какой то ерунде( 
сначала думал делать через делегата, но потом понял что это не то что нужно... 

  Да говорю же что нельзя функцию класса ни в каком виде. Более того, насколько я знаю, указатель на функцию класса может занимать до 16ти байт. Как его впихнуть в 4 байта? Не умеет таких вещей делать компилятор вот и ругается. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Dem_max
Дата 12.7.2012, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: нет
Всего: 39



Код

class TM
{
...
  LONG CALLBACK  waveInProcIN(HWAVEIN hwi, UINT uMsg, DWORD dwParam1, DWORD dwParam2);
  LONG CALLBACK  waveInProcINStatic(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
  {
    TM* tm = reinterpret_cast<TM*>(dwInstance);
    if( tm )
      return tm->waveInProcIN(hwi, uMsg, dwParam1, dwParam2);
    return XXX;//какой-то код ошибки
  }
};
 
MResult=waveInOpen(&hWaveIn, WAVE_MAPPER, &WaveFormat, (DWORD_PTR)&TM::waveInProcINStatic, (DWORD_PTR)tm, CALLBACK_FUNCTION);



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.