|
以前有个evc4.0创建的ocx控件 该控件有个属性readonlyproperty 被设定为只读属性:
DISP_PROPERTY_EX(CControlInvokeSetNotSupportedCtrl, "readonlyproperty", Getreadonlyproperty, SetNotSupported, VT_R8)
在调用该控件时,使用如下方法:
CWnd *pCalander=GetDlgItem(IDC_CONTROLINVOKESETNOTSUPPORTEDCECTRL1);
IDispatch *pDisp;
LPUNKNOWN lpUnknown=(pCalander->GetControlUnknown());
HRESULT hr = lpUnknown->QueryInterface(IID_IDispatch,(LPVOID *) &pDisp);
CComDispatchDriver m_pIDispatch( pDisp );
VARIANT tVar;
tVar.vt = VT_R8;
tVar.dblVal = 10;
DISPID PropID;
hr = m_pIDispatch.GetIDOfName( L"readonlyproperty",&PropID );
hr = m_pIDispatch.PutProperty(PropID, &tVar);
将该控件转换成vs2008,转换方法为:
创建同名vs2008工程,采用MFC Smart Device Control,创建工程后删除除了stdfx.h的所有其他头文件,除了.rc2外所有的资源文件,除了stdafx.cpp之外所有的cpp,idl,def文件,然后将evc工程下的对应文件拷贝到vs2008工程目录下,将文件添加到工程中,设定Use MFC in share DLL,生成ocx。
现在问题是,vs2008转换后的ocx使用上述方法调用m_pIDispatch.PutProperty时会出现异常,而如果使用vs2008创建相同的ocx却不会出现异常问题
|
|