Russian Qt Forum

Программирование => Общий => Тема начата: Aeromiss от Декабрь 15, 2010, 03:42



Название: SIGSEVG(отладчик) Segmentation fault...
Отправлено: 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);
}
Скажите плс что да как бороться?


Название: Re: SIGSEVG(отладчик) Segmentation fault...
Отправлено: Fat-Zer от Декабрь 15, 2010, 03:59
пакажите заголовок mixerGetLineInfo.
И всё, что капсом набрано(кроме того, что очевидно какие-то флаги), это классы или дефайны? Если дефайны, то тоже покажите.


Название: Re: SIGSEVG(отладчик) Segmentation fault...
Отправлено: Aeromiss от Декабрь 15, 2010, 04:05
а тут кароче winapi идет и используются
#include "windows.h"
#include <mmsystem.h>
ну если интересно то глянь в mmsystem...=) они там все капсом набраны. Ну.. вообщем как в либе дано так и юзаеца=))


Название: Re: SIGSEVG(отладчик) Segmentation fault...
Отправлено: Fat-Zer от Декабрь 15, 2010, 04:11
нету винды под рукой...
в любом случае подозрение, что ghmx - указатель и он не инициализируется


Название: Re: SIGSEVG(отладчик) Segmentation fault...
Отправлено: Aeromiss от Декабрь 15, 2010, 04:18
да, ты прав, я его спецом поставил ....  без указателя пишет ошибку ему требуется HMIXEROBJ_* а не HMIXEROBJ_** ....  ну а с ним хоть приложение запускалось но работало с ошибкой.... кароче ппц системный регулятор громкости фиг сделаеш=(( winapi ужасно странная вещь...
а ну и LPHMIXEROBJ ghmx; должно быть HMIXEROBJ ghmx; но qt не видит такого типа ... по typedef'у что в mmsystem.h брал LPHMIXEROBJ ghmx; что тоже весьма странно...  вопрос остается тем же... что делать?=)


Название: Re: SIGSEVG(отладчик) Segmentation fault...
Отправлено: Fat-Zer от Декабрь 15, 2010, 04:30
Да... winapi без обёрток - страшная вещь, да и выглядит буд-то этот код вызывает сотону...


Название: Re: SIGSEVG(отладчик) Segmentation fault...
Отправлено: deaks от Декабрь 15, 2010, 10:52
какой-то хаос


Название: Re: SIGSEVG(отладчик) Segmentation fault...
Отправлено: Aeromiss от Декабрь 15, 2010, 12:17
есть конечно вариант, но он оч тяжелый .....http://www.codeproject.com/KB/vista/CoreAudio.aspx.... тут исходник dll и проги ... но там реально сотону вызывает.... хоть там хоть и VS но не разберешся...


Название: Re: SIGSEVG(отладчик) Segmentation fault...
Отправлено: SASA от Декабрь 15, 2010, 12:25
какой-то хаос
Старый, добрый WinAPI :) Зато, когда люди видят твой код, думают, что ты крут. И вообще с другой планеты :)


Название: Re: SIGSEVG(отладчик) Segmentation fault...
Отправлено: Aeromiss от Декабрь 15, 2010, 13:34
Спасибо=) Подбодрил...=)  HMIXEROBJ - понимает delphi, а qt чето не очень=(
Ну все сделал тока указатели не надо ставить и тип Qt начал понимать.....
Но все равно создается канал приложения и только у него громкость убирает.... а нужно всех каналов.... Че делать?=)