描述:
需要在程序中播放MP3文件,在MFC中我知道怎么弄,但在ATL/WTL下不知道该从何入手。下面的尝试是模仿MFC的做法,利用Active Movie Control。但是失败:
//get the CLSID of Active Movie Control
CLSID const& GetClsid()
{
static CLSID const clsid
= { 0x5589FA1, 0xC356, 0x11CE, { 0xBF, 0x1, 0x0, 0xAA, 0x0, 0x55, 0x59, 0x5A } };
return clsid;
}
//get IDispatch interface
::CoCreateInstance(GetClsid(), NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (void **)&pIDispatch);
//get DISPID of "FileName"
DISPID dispid = -1;
OLECHAR * name = L"FileName";
hr = pIDispatch->GetIDsOfNames(IID_NULL, &name, 1, GetUserDefaultLCID(), &dispid);
//set the filename to be demo.mp3
wchar_t wszIn[] = L"demo.mp3";
BSTR bstrIn = ::SysAllocString(wszIn);
VARIANTARG varg;
::VariantInit(&varg);
varg.vt = VT_BSTR;
varg.bstrVal = bstrIn;
DISPPARAMS param;
param.cArgs = 1;
param.rgvarg = &varg;
param.cNamedArgs = 0;
param.rgdispidNamedArgs = NULL;
hr = pIDispatch->Invoke(dispid, IID_NULL, GetUserDefaultLCID(), DISPATCH_PROPERTYPUT, ¶m, NULL, NULL, NULL);
GetIDsOfNames()调用成功,返回11。但是Invoke()调用失败。返回值是
-2147352572。通过VC6自带的Error Lookup
察看,返回信息“找不到参数”。
在Invoke()调用失败后,通过GetLastError()获得失败信息,返回值为0。
哪里出问题了呢?如果这种方法不行,请教用什么方法可以实现播放MP3文件呢?
谢谢~~