activemovie控件做视频播放器时,打开文件选好视频后,出现“无效的参数数目”异常

activemovie控件做视频播放器时,打开文件选好视频后,出现“无效的参数数目”错误
vs2008,C++
用activemovie控件做视频播放器,打开文件选好视频(格式为avi符合)后,弹出“无效的参数数目”,如下activemovie控件做视频播放器时,打开文件选好视频后,出现“无效的参数数目”异常

打开文件处代码如下:

char szFilter[]="ALL Data(*.*)|*.*|AVI File (*.avi)|*.avi|Video File (*.dat)|*.dat|Wav File (*.wav)|*.wav|Mid File(*.mid;*.rmi)|*.mid;*.rmi|MPEG File (*.mpeg)|*.mpeg";


CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter ); 
if (IDOK == FileDlg.DoModal()) 
{
CString PathName = FileDlg.GetPathName();
PathName.MakeUpper(); 
m_movie.put_FileName(PathName); //m_movie是activemovie控件的变量
}

put_FileName处代码如下:

void put_FileName(LPCTSTR newValue)
{
static BYTE parms[] = VTS_BSTR ;
InvokeHelper(0xb, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL,parms, newValue); 
}
麻烦各位大神指导~~
无效的参数数目 activemovie c++ 打开文件

------解决方案--------------------
没初始化com环境么?就这样看没什么问题,网上的代码好像都是这样写的,你调试看看 PathName是否正确了,还有就是你最好就是用系统自带的那几个Avi视频来测试下
------解决方案--------------------
在工程里APP类里的初始化函数里加上:AfxInitOle();好象是这么写的,这就是初始化OLE函数,另外,你的工程里是什么字符集,如果是UNICODE,你改成多字节试试(应该和字符集无关,不然编绎出错),另外,你以字符方式传个文件试试:m_movie.put_FileName(_T("c:\\a.avi")); //m_movie是activemovie控件的变量
------解决方案--------------------
InvokeHelper你难道没用Variant变量么?
static BYTE parms[] = VTS_BSTR ;这个不对