Russian Qt Forum
Июнь 14, 2024, 05:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: SIGSEVG(отладчик) Segmentation fault...  (Прочитано 5130 раз)
Aeromiss
Гость
« : Декабрь 15, 2010, 03:42 »

LPHMIXEROBJ ghmx;
MMRESULT mmr;
int Receiver::GetMasterVolumeControlID()
{
  // get dwLineID
  MIXERLINE mxl;
  mxl.cbStruct = sizeof(MIXERLINE);
  mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
  if (::mixerGetLineInfo(*ghmx, &mxl,                                                    // здесь происходит SIGSEVG
    MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE)
    != MMSYSERR_NOERROR)
    return 34;
  // get dwControlID
  MIXERCONTROL mxc;
  MIXERLINECONTROLS mxlc;
  mxlc.cbStruct = sizeof(MIXERLINECONTROLS);
  mxlc.dwLineID = mxl.dwLineID;
  mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
  mxlc.cControls = 1;
  mxlc.cbmxctrl = sizeof(MIXERCONTROL);
  mxlc.pamxctrl = &mxc;
  if (mixerGetLineControls(*ghmx, &mxlc,
    MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE)
    != MMSYSERR_NOERROR)
    return 34;
  return mxc.dwControlID;
}
bool Receiver::SetVolume(DWORD dwVolume)
{
    MIXERCONTROLDETAILS mxcd;
      MIXERCONTROLDETAILS_UNSIGNED mxcd_u;
      mxcd.cbStruct = sizeof(mxcd);
      mxcd.dwControlID = GetMasterVolumeControlID();
      mxcd.cChannels = 1;
      mxcd.cMultipleItems = 0;
      mxcd.cbDetails = 4;
      mxcd.paDetails = &mxcd_u;
      mmr = mixerGetControlDetails(*ghmx, &mxcd, 0L);
      if (MMSYSERR_NOERROR != mmr) return FALSE;
      mxcd_u.dwValue = dwVolume;
      mmr = mixerSetControlDetails(*ghmx, &mxcd, 0L);
      if (MMSYSERR_NOERROR != mmr) return FALSE;
      return TRUE;
}

void Receiver::Volume()               //первоначальный вызов этой функции
{
    SetVolume((DWORD)0x0000);
}
Скажите плс что да как бороться?
« Последнее редактирование: Декабрь 15, 2010, 04:23 от Aeromiss » Записан
Fat-Zer
Гость
« Ответ #1 : Декабрь 15, 2010, 03:59 »

пакажите заголовок mixerGetLineInfo.
И всё, что капсом набрано(кроме того, что очевидно какие-то флаги), это классы или дефайны? Если дефайны, то тоже покажите.
« Последнее редактирование: Декабрь 15, 2010, 04:03 от Fat-Zer » Записан
Aeromiss
Гость
« Ответ #2 : Декабрь 15, 2010, 04:05 »

а тут кароче winapi идет и используются
#include "windows.h"
#include <mmsystem.h>
ну если интересно то глянь в mmsystem...=) они там все капсом набраны. Ну.. вообщем как в либе дано так и юзаеца=))
Записан
Fat-Zer
Гость
« Ответ #3 : Декабрь 15, 2010, 04:11 »

нету винды под рукой...
в любом случае подозрение, что ghmx - указатель и он не инициализируется
Записан
Aeromiss
Гость
« Ответ #4 : Декабрь 15, 2010, 04:18 »

да, ты прав, я его спецом поставил ....  без указателя пишет ошибку ему требуется HMIXEROBJ_* а не HMIXEROBJ_** ....  ну а с ним хоть приложение запускалось но работало с ошибкой.... кароче ппц системный регулятор громкости фиг сделаеш=(( winapi ужасно странная вещь...
а ну и LPHMIXEROBJ ghmx; должно быть HMIXEROBJ ghmx; но qt не видит такого типа ... по typedef'у что в mmsystem.h брал LPHMIXEROBJ ghmx; что тоже весьма странно...  вопрос остается тем же... что делать?=)
« Последнее редактирование: Декабрь 15, 2010, 04:23 от Aeromiss » Записан
Fat-Zer
Гость
« Ответ #5 : Декабрь 15, 2010, 04:30 »

Да... winapi без обёрток - страшная вещь, да и выглядит буд-то этот код вызывает сотону...
Записан
deaks
Гость
« Ответ #6 : Декабрь 15, 2010, 10:52 »

какой-то хаос
Записан
Aeromiss
Гость
« Ответ #7 : Декабрь 15, 2010, 12:17 »

есть конечно вариант, но он оч тяжелый .....http://www.codeproject.com/KB/vista/CoreAudio.aspx.... тут исходник dll и проги ... но там реально сотону вызывает.... хоть там хоть и VS но не разберешся...
Записан
SASA
Гость
« Ответ #8 : Декабрь 15, 2010, 12:25 »

какой-то хаос
Старый, добрый WinAPI Улыбающийся Зато, когда люди видят твой код, думают, что ты крут. И вообще с другой планеты Улыбающийся
« Последнее редактирование: Декабрь 15, 2010, 12:27 от SASA » Записан
Aeromiss
Гость
« Ответ #9 : Декабрь 15, 2010, 13:34 »

Спасибо=) Подбодрил...=)  HMIXEROBJ - понимает delphi, а qt чето не очень=(
Ну все сделал тока указатели не надо ставить и тип Qt начал понимать.....
Но все равно создается канал приложения и только у него громкость убирает.... а нужно всех каналов.... Че делать?=)
« Последнее редактирование: Декабрь 15, 2010, 14:23 от Aeromiss » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 17.