Article View: be.comp.programming
Article #3825Re: MSVC++ 6.0 probleem.
From: John
Date: Sun, 12 Oct 2003 10:30
Date: Sun, 12 Oct 2003 10:30
249 lines
10183 bytes
10183 bytes
Luc,
Bedankt voor uw antwoord.
Ik heb inmiddels het installatie probleem opgelost door de werkende
executables gewoon te kopi�ren naar de XP machine. Nu de ontwikkeling
omgeving doet het op de XP machine, maar het programma gedraagt hetzelfde.
Onderaan is een stukje code om de microfoon te selecteren als opname ingang.
Op 98 en NT dat werkt prima. Op een XP machine, de geselecteerde ingang is
onjuist. Ik heb gemerkt dat als ik 7 ingangen heb (index 0 t/m 6), en de mic
ingang is de tweede (index 1), dan wordt de 6de ingang (index 5)
geselecteerd. Na een beetje debuggen nu weet ik zeker dat de volgorde van de
ingangen zijn omgekeerd. Dus als index i wordt met de code geselecteerd, de
driver selecteert (mixerDestLine.cConnections - i).
// BEGIN CODE
UINT nNumMixers;
HMIXER hMixer = NULL;
MIXERCAPS mxcaps;
nNumMixers = ::mixerGetNumDevs();
if (nNumMixers < 1){return false;}
::ZeroMemory(&mxcaps, sizeof(MIXERCAPS));
ret = mixerOpen(&hMixer, (UINT)m_hWaveIn, NULL, NULL,
MIXER_OBJECTF_HWAVEIN);
if (ret == MMSYSERR_NOERROR)
{
if (::mixerGetDevCaps(reinterpret_cast<UINT>(hMixer), &mxcaps,
sizeof(MIXERCAPS))
!= MMSYSERR_NOERROR)
{
return FALSE;
}
// Get mixer recording dest line.
MIXERLINE mixerDestLine;
UINT nDistnations = mxcaps.cDestinations;
UINT waveInDistIndex;
for (UINT i=0; i< nDistnations; i++){
memset(&mixerDestLine, 0, sizeof(MIXERLINE));
mixerDestLine.cbStruct = sizeof(MIXERLINE);
mixerDestLine.dwDestination = i;
mixerDestLine.dwSource = 0;
ret = mixerGetLineInfo ((HMIXEROBJ)hMixer, &mixerDestLine,
MIXER_GETLINEINFOF_DESTINATION);
if (ret == MMSYSERR_NOERROR){
if (mixerDestLine.dwComponentType ==
MIXERLINE_COMPONENTTYPE_DST_WAVEIN){
waveInDistIndex = i;
break;
}
}
}
memset(&mixerDestLine, 0, sizeof(MIXERLINE));
mixerDestLine.cbStruct = sizeof(MIXERLINE);
mixerDestLine.dwDestination = waveInDistIndex;
mixerDestLine.dwSource = 0;
mixerDestLine.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN ;
ret = mixerGetLineInfo
(
(HMIXEROBJ)hMixer,
&mixerDestLine,
MIXER_GETLINEINFOF_DESTINATION
);
if (ret == MMSYSERR_NOERROR)
{
// Enumerate mixer recording source lines.
UINT srcConnection = 0;
MIXERLINE mixerSrcLine;
for (; srcConnection < mixerDestLine.cConnections; srcConnection++)
{
memset(&mixerSrcLine, 0, sizeof(MIXERLINE));
mixerSrcLine.cbStruct = sizeof(MIXERLINE);
mixerSrcLine.dwDestination = waveInDistIndex;
mixerSrcLine.dwSource = srcConnection;
ret = mixerGetLineInfo
(
(HMIXEROBJ)hMixer,
&mixerSrcLine,
MIXER_GETLINEINFOF_SOURCE
);
if (mixerSrcLine.dwComponentType ==
MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE)
{
// Try MUX control type
////////////////////////
MIXERCONTROL mixerRecControl;
memset(&mixerRecControl, 0, sizeof(MIXERCONTROL));
mixerRecControl.cbStruct = sizeof(MIXERCONTROL);
MIXERLINECONTROLS mixerRecLineControls;
memset(&mixerRecLineControls, 0, sizeof(MIXERLINECONTROLS));
mixerRecLineControls.cbStruct = sizeof(MIXERLINECONTROLS);
mixerRecLineControls.dwLineID = mixerDestLine.dwLineID;
mixerRecLineControls.dwControlType = MIXERCONTROL_CONTROLTYPE_MUX;
mixerRecLineControls.cControls = 1;
mixerRecLineControls.pamxctrl = &mixerRecControl;
mixerRecLineControls.cbmxctrl = sizeof(MIXERCONTROL);
ret = mixerGetLineControls
(
(HMIXEROBJ)hMixer,
&mixerRecLineControls,
MIXER_GETLINECONTROLSF_ONEBYTYPE
);
if (ret != MMSYSERR_NOERROR){
// Try MIXER
memset(&mixerRecControl, 0, sizeof(MIXERCONTROL));
mixerRecControl.cbStruct = sizeof(MIXERCONTROL);
MIXERLINECONTROLS mixerRecLineControls;
memset(&mixerRecLineControls, 0, sizeof(MIXERLINECONTROLS));
mixerRecLineControls.cbStruct = sizeof(MIXERLINECONTROLS);
mixerRecLineControls.dwLineID = mixerDestLine.dwLineID;
mixerRecLineControls.dwControlType = MIXERCONTROL_CONTROLTYPE_MIXER;
mixerRecLineControls.cControls = 1;
mixerRecLineControls.pamxctrl = &mixerRecControl;
mixerRecLineControls.cbmxctrl = sizeof(MIXERCONTROL);
ret = mixerGetLineControls
(
(HMIXEROBJ)hMixer,
&mixerRecLineControls,
MIXER_GETLINECONTROLSF_ONEBYTYPE
);
}
if (ret == MMSYSERR_NOERROR)
{
MIXERCONTROLDETAILS mixerControlDetails;
mixerControlDetails.cbStruct = sizeof(MIXERCONTROLDETAILS);
mixerControlDetails.dwControlID =
mixerRecLineControls.pamxctrl->dwControlID;
mixerControlDetails.cMultipleItems = mixerDestLine.cConnections;
mixerControlDetails.cChannels = mixerDestLine.cChannels;
UINT BooleanArraySize = mixerControlDetails.cMultipleItems *
sizeof(MIXERCONTROLDETAILS_BOOLEAN);
LPMIXERCONTROLDETAILS_BOOLEAN BooleanArray = new
MIXERCONTROLDETAILS_BOOLEAN[mixerControlDetails.cMultipleItems];
if (BooleanArray)
{
memset(BooleanArray, 0, BooleanArraySize);
BooleanArray[srcConnection].fValue = 1;
mixerControlDetails.cbDetails = BooleanArraySize;
mixerControlDetails.paDetails = BooleanArray;
ret = mixerSetControlDetails
(
(HMIXEROBJ)hMixer,
&mixerControlDetails,
MIXER_SETCONTROLDETAILSF_VALUE
);
delete BooleanArray;
}
}
if (ret != MMSYSERR_NOERROR)
AfxMessageBox("Could not set the microphone as recording source.
Please do that manually from Windows mixer application.");
break;
}
}
}
ret = mixerClose(hMixer);
}
}
// END CODE
"Luc Kumps" <NOkumpsSPAM@pandora.be> schreef in bericht
news:YJchb.67791$Wm5.3454003@phobos.telenet-ops.be...
> John wrote:
> >> John wrote:
> >>> Ik heb geprobeerd mijn MSVC++ te instaleren op een NT of een XP
> >>> machine om op deze machine op nieuw te compileren maar die geeft
> >>> fout melding bij het starten, ik kan het programma dus niet op nieuw
> >>> compileren op een van die computers. Heeft iemand misschien een
> >>> verklaring voor dit installatie probleem?
> >>
> >> De Win32 API (en aanverwanten) heeft grote gemeenschappelijke
> >> stukken op de verschillende platformen, maar is zeker niet identiek.
> >> Je kunt bv. geen "named pipe" maken op Win98.
> >>
> >> Ik zou je willen aanraden om:
> >>
> >> 1. Ons een klein stukje code te tonen, waarmee de 'vreemde
> >> problemen' kunnen gereproduceerd worden. Bv. een paar lijntjes
> >> waarin de API oproep, die 'vreemde problemen' veroorzaakt,
> >> uitgevoerd wordt.
> >>
> >
> > De WaveOutXXX(), mixerSetControlDetails(), mixerGetControlDetails()
> > APIs zijn beschikbaar op alle Windows 32 versies. Ik heb ook een
> > andere posting gevonden die hetzelfde probleem beschrijft (iemand
> > heeft mixer code geschreven onder Win 2000 en de code gedraagt anders
> > onder 98). De mixer APIs in mijn geval werken ook op alle systemen,
> > maar op sommige operating systemen doen ze de juiste wijziging (het
> > selecteren van een bepaald mixer ingang) en op andere niet (hij
> > selecteert iets anders). Ik heb dat met verschillende sound cards
> > getest.
>
> Nogmaals, een stukje code zou helpen.
> Anders moeten we in het blinde weg vragen stellen, zoals 'je hebt toch wel
> je MIXERCONTROLDETAILS structuur volledig op 0 ge�nitialiseerd?'
>
> >> 2. Wat meer uitleg te geven. "Een foutmelding bij het starten" is
> >> zeer vaag. Als je vertelt wat je precies geprobeerd hebt, en vooral
> >> wat de inhoud is van 'een foutmelding' (er zijn er nu eenmaal een
> >> heleboel), dan is de kans dat je geholpen wordt een stuk groter...
> >
> > Foutmelding:
> > "The instruction at 0x00400270 referenced memory at 0x805b2588. The
> > memory could not be read"
>
> Heb je dit al op meer dan ��n Win2K systeem geprobeerd? Ben je
administrator
> op die machine? Is er zeker genoeg disk space?
> Probeer misschien eens in een 'stomme' VGA resolutie (bv. 640x400), of met
> zo weinig mogelijk andere programma's (bv. virus check) draaiend terwijl
je
> installeert.
>
> Je bent alleszins niet alleen, op 16 juli 2000 heeft ene "Tony Wang"
> (tonywtao@hotmail.com) dit gepost:
> I'm a beginner of VS, After set-up Visual Studio 60. on Windows2000
> professional Edition, all materials are working properly except VC++, when
I
> start-up VC++ I get the following error:
> The instruction at "0x00400270" referenced memory at "0x805b2588", the
> memory could not be read!
> What does this message mean and how to resolve it?
> I'll be very appreciate for your suggestions.Jammer genoeg is daar nooit
een
> reactie op gekomen...
>
> Luc K
>
>
Technical Details
Message-ID:
<3f892d2d$0$434$1b62eedf@news.wanadoo.nl>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!fu-berlin.de!news.tele.dk!news.tele.dk!small.news.tele.dk!newsgate.cistron.nl!news2.euro.net!postnews1.euro.net!news.wanadoo.nl!not-for-mailReferences:
<3f8530b2$0$35130$1b62eedf@news.wanadoo.nl> <eCahb.67612$dg5.3317898@phobos.telenet-ops.be> <3f854d7b$0$35138$1b62eedf@news.wanadoo.nl> <YJchb.67791$Wm5.3454003@phobos.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII X-Google-Thread: fcea4,cbd04cc8075432e4 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2003-10-12 03:30:19 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news2.google.com!fu-berlin.de!news.tele.dk!news.tele.dk!small.news.tele.dk!newsgate.cistron.nl!news2.euro.net!postnews1.euro.net!news.wanadoo.nl!not-for-mail From: "John" <john_baker@yahoo.co.uk> Newsgroups: be.comp.programming References: <3f8530b2$0$35130$1b62eedf@news.wanadoo.nl> <eCahb.67612$dg5.3317898@phobos.telenet-ops.be> <3f854d7b$0$35138$1b62eedf@news.wanadoo.nl> <YJchb.67791$Wm5.3454003@phobos.telenet-ops.be> Subject: Re: MSVC++ 6.0 probleem. Date: Sun, 12 Oct 2003 12:30:54 +0200 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.50.4133.2400 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 Lines: 251 Message-ID: <3f892d2d$0$434$1b62eedf@news.wanadoo.nl> Organization: Wanadoo NNTP-Posting-Date: 12 Oct 2003 10:30:06 GMT NNTP-Posting-Host: c3eea2b18.cable.wanadoo.nl X-Trace: DXC=gfjUa@g7J^<UG>M]?U:WX:SKYkiiVZ:6?IQ^iXI>BNo9o7a;:mNmfY8Bg>`n^0Bac6la94icKPlb=3jYWQ2HaXB?E6NInl=3Ln1 X-Complaints-To: abuse@wanadoo.nl