IOleCommandTarget::Exec()一问

3m2u 2004-12-07 10:05:36
class ATL_NO_VTABLE CWebBrowserEventSink :
public CComObjectRootEx<CComSingleThreadModel>,
public IOleCommandTarget,
public IDispatch
{
}
声明是这样的。用到这个类的代码有:
CComObject<CWebBrowserEventSink> *m_pWebBrowserEventSink;
hr = CComObject<CWebBrowserEventSink>::CreateInstance(&m_pWebBrowserEventSink);
编译的时候说

d:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(2440) : error C2259: 'CComObject<class CWebBrowserEventSink>' : cannot instantiate abstract class due to following members:
d:\program files\microsoft visual studio\vc98\atl\include\atlbase.h(2188) : while compiling class-template member function 'long __stdcall ATL::CComObject<class CWebBrowserEventSink>::CreateInstance(class ATL::CComObject<class CWebBrowserEve
ntSink> ** )'
d:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(2440) : warning C4259: 'long __stdcall IOleCommandTarget::QueryStatus(const struct _GUID *,unsigned long,struct _tagOLECMD [],struct _tagOLECMDTEXT *)' : pure virtual function was no
t defined
d:\program files\microsoft sdk\include\docobj.h(1402) : see declaration of 'QueryStatus'
d:\program files\microsoft visual studio\vc98\atl\include\atlbase.h(2188) : while compiling class-template member function 'long __stdcall ATL::CComObject<class CWebBrowserEventSink>::CreateInstance(class ATL::CComObject<class CWebBrowserEve
ntSink> ** )'
d:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(2440) : error C2259: 'CComObject<class CWebBrowserEventSink>' : cannot instantiate abstract class due to following members:
d:\program files\microsoft visual studio\vc98\atl\include\atlbase.h(2188) : while compiling class-template member function 'long __stdcall ATL::CComObject<class CWebBrowserEventSink>::CreateInstance(class ATL::CComObject<class CWebBrowserEve
ntSink> ** )'
d:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(2440) : warning C4259: 'long __stdcall IOleCommandTarget::QueryStatus(const struct _GUID *,unsigned long,struct _tagOLECMD [],struct _tagOLECMDTEXT *)' : pure virtual function was no
t defined
d:\program files\microsoft sdk\include\docobj.h(1402) : see declaration of 'QueryStatus'
d:\program files\microsoft visual studio\vc98\atl\include\atlbase.h(2188) : while compiling class-template member function 'long __stdcall ATL::CComObject<class CWebBrowserEventSink>::CreateInstance(class ATL::CComObject<class CWebBrowserEve
ntSink> ** )'
Error executing cl.exe.

说不能实例化虚类。我用IOleCommandTarget是想自己处理页面中的脚本错误,但遇到了这样的情况怎么改呢?
...全文
266 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
3m2u 2005-01-05
  • 打赏
  • 举报
回复
谁对com 比较熟悉,能帮我看看代码么?
3m2u 2004-12-24
  • 打赏
  • 举报
回复
加点分
3m2u 2004-12-17
  • 打赏
  • 举报
回复
hr = CComObject<CWebBrowserEventSink>::CreateInstance(&m_pWebBrowserEventSink);

主要是上面这句怎么出下面的错,不太理解. 加上个QueryStatus也不行 :( 

d:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(2440) : error C2259: 'CComObject<class CWebBrowserEventSink>' : cannot instantiate abstract class due to following members:
d:\program files\microsoft visual studio\vc98\atl\include\atlbase.h(2188) : while compiling class-template member function 'long __stdcall ATL::CComObject<class CWebBrowserEventSink>::CreateInstance(class ATL::CComObject<class CWebBrowserEve
ntSink> ** )'
蒋晟 2004-12-15
  • 打赏
  • 举报
回复
不行的话把错误消息里面提到的函数都实现一下吧
3m2u 2004-12-12
  • 打赏
  • 举报
回复
更新到最新的了,也不行.看来还是程序有问题啊
3m2u 2004-12-10
  • 打赏
  • 举报
回复
1.打了sp6
2.sdk应该也是一年以内的.不知道变化了多少.
3.听你的意思不是说语法问题,或者程序问题啊.
蒋晟 2004-12-10
  • 打赏
  • 举报
回复
1 安装最新的Visual Studio Service Pack
2 安装最新的平台SDK http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
gjd111686 2004-12-09
  • 打赏
  • 举报
回复
void CDefineOfficeView::ExecuteCommand(DWORD nCmdID, DWORD nCmdExecOpt)
{
IOleCommandTarget* pCommandTarget=NULL;
IOleDocument* pDocument=NULL;
IOleInPlaceActiveObject* pInPlaceActiveObject=NULL;
HRESULT hResult=pSelection->m_lpObject->QueryInterface(IID_IOleDocument, (void**)&pDocument);
if(SUCCEEDED(hResult))
{
hResult=pDocument->QueryInterface(IID_IOleCommandTarget,(void**)&pCommandTarget);
if(SUCCEEDED(hResult))
{
hResult=pCommandTarget->Exec(NULL,nCmdID,nCmdExecOpt,NULL,NULL);
if(SUCCEEDED(hResult))
{
//AfxMessageBox(_T("执行命令成功."),MB_ICONINFORMATION);
hResult=pDocument->QueryInterface(IID_IOleInPlaceActiveObject,(void**)&pInPlaceActiveObject);
if(SUCCEEDED(hResult))
{
//AfxMessageBox(_T("接口调用成功."),MB_ICONINFORMATION);
CRect rect;
GetClientRect(rect);
pInPlaceActiveObject->ResizeBorder(rect,(IOleInPlaceUIWindow*)pSelection->GetInPlaceWindow(),2);
////
pInPlaceActiveObject->Release();
}
}
else
{
//AfxMessageBox(_T("执行命令失败."),MB_ICONINFORMATION);
}
pCommandTarget->Release();
}
pDocument->Release();
}
}
蒋晟 2004-12-09
  • 打赏
  • 举报
回复
BEGIN_COM_MAP,END_COM_MAP(),COM_INTERFACE_ENTRY和IOleCommandTarget的方法的实现在哪里?
3m2u 2004-12-09
  • 打赏
  • 举报
回复
整个如下,帖子中省掉了里面的内容

class ATL_NO_VTABLE CWebBrowserEventSink :
public CComObjectRootEx<CComSingleThreadModel>,
public IOleCommandTarget, //for exec to handle script error
public IDispatch
{
public:
CWebBrowserEventSink() : m_pMainWindow(NULL) {}

public:
BEGIN_COM_MAP(CWebBrowserEventSink)
COM_INTERFACE_ENTRY(IOleCommandTarget)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY_IID(DIID_DWebBrowserEvents2, IDispatch)
END_COM_MAP()

STDMETHOD(GetTypeInfoCount)(UINT* pctinfo) { return E_NOTIMPL; }
STDMETHOD(GetTypeInfo)(UINT itinfo, LCID lcid, ITypeInfo** pptinfo) { return E_NOTIMPL; }
STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgdispid) { return E_NOTIMPL; }
STDMETHOD(Invoke)(DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr);

STDMETHODIMP Exec( const GUID* pguidCmdGroup, DWORD nCmdID,
DWORD nCmdexecopt, VARIANTARG* pvaIn, VARIANTARG* pvaOut )
{
return S_OK;
}

public:
CMainWindow* m_pMainWindow;
};

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧