描述:
在对话框里Insert ActiveX Conctrl后,通过鼠标右键设置这个Activex中某个属性值,第二次鼠标右击打开属性页发现这些属性根本就没有保存下来,依然是默认值。
我就改成动态创建ActiveX的方法,通过Invoke也依然保存不了:
CWnd m_ControlWrapper;
m_ControlWrapper.CreateCtrl(//...)
LPUNKNOWN pUnk = m_ControlWrapper.GetControlUnknown();
LPDISPATCH pDisp = NULL;
pUnk->QueryInterface(IID_IDispatch, (LPVOID*)&pDisp);
DISPID mydispid = DISPID_PROPERTYPUT;
VARIANTARG v;
VariantInit(&v);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = SysAllocString(L"rtsp://127.0.0.1:8032/1.rmvb");
szMember =L"URL";//设置URL属性
DISPPARAMS dispparams={NULL,NULL,1,1};
dispparams.rgvarg=&v;
dispparams.rgdispidNamedArgs = &mydispid;
dispparams.cArgs = 1;
dispparams.cNamedArgs = 1;
hr = pDisp->GetIDsOfNames(IID_NULL, &szMember, 1,
LOCALE_USER_DEFAULT, &dispid);
if (FAILED(hr) )
{
AfxMessageBox("GetIDsOfNames 2 Failed");
}
hr = pDisp->Invoke(
dispid,
IID_NULL,
LOCALE_USER_DEFAULT,
DISPATCH_PROPERTYPUT,
&dispparams, NULL, NULL, NULL);
if (FAILED(hr))
{
AfxMessageBox("Invoke 2 Failed!");
}
所有调用都未失败,设置属性值后,再Invoke获得该属性值为NULL,就是保存不了属性值。可该控件在网页的js代码里却可以设置并保存属性值的
解决方案1:
UP