Hi,
this is a very dump question I know, but I struggle. I use PlayUtility.cpp and PlayUtility.h from the wiki page "Playing audio files" in my Qt-garden project. In the main function I call for testing purpose: CPlayerUtility *p = CPlayerUtility::NewL(_L("E:\\play.wav")); While compilation I get the error:
What I am missing? Which library is to additionaly to link?mwldsym2.exe: warning: Multiply defined symbol: __InitializeThreadDataIndex in
mwldsym2.exe: warning: files uc_cwhelp.obj (EEXE.LIB), ThreadLocalData.c.obj (msl_all_static_mse_symbian_d.lib),
mwldsym2.exe: warning: keeping definition in ThreadLocalData.c.obj
mwldsym2.exe: warning: Multiply defined symbol: ___get_MSL_init_count in
mwldsym2.exe: warning: files uc_cwhelp.obj (EEXE.LIB), startup.win32.c.obj (msl_all_static_mse_symbian_d.lib),
mwldsym2.exe: warning: keeping definition in startup.win32.c.obj
mwldsym2.exe: warning: Multiply defined symbol: __CleanUpMSL in
mwldsym2.exe: warning: files uc_cwhelp.obj (EEXE.LIB), startup.win32.c.obj (msl_all_static_mse_symbian_d.lib),
mwldsym2.exe: warning: keeping definition in startup.win32.c.obj
mwldsym2.exe: Undefined symbol: 'class CMdaAudioPlayerUtility * CMdaAudioPlayerUtility::NewFilePlayerL(class TDesC16 const &, class MMdaAudioPlayerCallback &, int, enum TMdaPriorityPreference, class CMdaServer *) (?NewFilePlayerL@CMdaAudioPlayerUtility@@SAPAV1@ABVTDesC16@@AAVMMdaAudioPlayerCallback@@HW4TMdaPriorityPreference@@PAVCMdaServer@@@Z)'
mwldsym2.exe: referenced from 'void CPlayerUtility::ConstructL(class TDesC16 const &) (?ConstructL@CPlayerUtility@@AAEXABVTDesC16@@@Z)' in PlayUtility.cpp:38
Thanks for any hint...
Lykurg
For completeness:
Code:#include <e32std.h> #include <MdaAudioSamplePlayer.h> class CPlayerUtility : public CBase, public MMdaAudioPlayerCallback { public: static CPlayerUtility* NewL(const TDesC& aFileName); static CPlayerUtility* NewLC(const TDesC& aFileName); ~CPlayerUtility(); private: CPlayerUtility(); void ConstructL(const TDesC& aFileName); public: void Play(); void Stop(); public: // from MMdaAudioToneObserver void MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration); void MapcPlayComplete(TInt aError); private: CMdaAudioPlayerUtility* iPlayUtility; TBool iPlaying, iPrepared; };Code:#include "PlayUtility.h" #include <MdaAudioTonePlayer.h> #include <eikmenup.h> CPlayerUtility* CPlayerUtility::NewL(const TDesC& aFileName) { CPlayerUtility* self = NewLC(aFileName); CleanupStack::Pop(self); return self; } CPlayerUtility* CPlayerUtility::NewLC(const TDesC& aFileName) { CPlayerUtility* self = new (ELeave) CPlayerUtility(); CleanupStack::PushL(self); self->ConstructL(aFileName); return self; } CPlayerUtility::~CPlayerUtility() { if (iPlayUtility) { iPlayUtility->Stop(); // iPlayUtility->Close(); // Comment out also because of compiler errors. } delete iPlayUtility; } CPlayerUtility::CPlayerUtility() { } void CPlayerUtility::ConstructL(const TDesC& aFileName) { iPlayUtility = CMdaAudioPlayerUtility::NewFilePlayerL(aFileName, *this); iPlaying = iPrepared = EFalse; } void CPlayerUtility::Play() { iPlayUtility->Play(); iPlaying = ETrue; } void CPlayerUtility::Stop() { iPlayUtility->Stop(); iPlaying = EFalse; } void CPlayerUtility::MapcPlayComplete(TInt /*aError*/) { iPlaying = EFalse; } void CPlayerUtility::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& /*aDuration*/) { if (aError == KErrNone) { iPrepared = ETrue; iPlayUtility->SetVolume(iPlayUtility->MaxVolume()); } }




