I don't know why Dshow does not work, but I shifted to using MMSystem's mciSendString command. I guess that's better because it's easier to understand without much object creation.
Thanks for all those who tried to help. :D
#include <mmsystem.h>
...
snippet:
std::string playCommand = "open music.mp3 type mpegvideo alias media";
mciSendString(playCommand.c_str(), NULL, 0, 0);
playCommand = "play media from 0";
mciSendString(playCommand.c_str(), NULL, 0, 0);</mmsystem.h>