Salve ragazzi..
ho un ciclo infinito che esegue questa funzione:
E queste son le due funzioni che richiama:codice:const SPPHRASE* speech::asr(string rule) { CoInitialize(0); hr = InitSAPI(); //quà ci andrebbe il codice ma il problema si verifica già così... CleanupSAPI(); CoUninitialize(); return pParts; }
codice:HRESULT speech::InitSAPI() { hr = S_OK; while ( 1 ) { // create a recognition engine hr = cpEngine.CoCreateInstance(CLSID_SpSharedRecognizer); if ( FAILED(hr) ) break; // create the command recognition context hr = cpEngine->CreateRecoContext( &cpRecoCtx ); if ( FAILED(hr) ) break; hr = cpRecoCtx->SetNotifyWin32Event(); hEvent = cpRecoCtx->GetNotifyEventHandle(); hr = cpRecoCtx->SetInterest( SPFEI(SPEI_RECOGNITION), SPFEI(SPEI_RECOGNITION) ); if ( FAILED(hr) ) break; // Load our grammar, which is the compiled form of simple.xml bound into this executable as a // user defined ("SRGRAMMAR") resource type. hr = cpRecoCtx->CreateGrammar(1, &cpGram); if (FAILED(hr) ) break; // Set rules to active, we are now listening for commands hr = cpGram->SetRuleState(NULL, NULL, SPRS_ACTIVE ); if ( FAILED(hr) ) break; break; } // if we failed and have a partially setup SAPI, close it all down if ( FAILED(hr) ) CleanupSAPI(); return (hr); } void speech::CleanupSAPI() { // Release grammar, if loaded if ( cpGram ) cpGram.Release(); // Release recognition context, if created if ( cpRecoCtx ) { cpRecoCtx->SetNotifySink(NULL); cpRecoCtx.Release(); } // Release recognition engine instance, if created if ( cpEngine ) cpEngine.Release(); }
sul main ho un for che esegue asr().. il problema è che a programma aperto.. la memoria continua ad allocare.. allocare... allocare.. che cosa sto sbagliando?

Rispondi quotando