2015-09-17 72 views
2

我创造IDispatch这样的:C++ MS Word中 - 了oleautomation

IDispatch *m_pWApp = NULL; 
CoInitialize(NULL); 
CLSID clsid; 
m_hr = CLSIDFromProgID(L"Word.Application", &clsid); 
if(SUCCEEDED(m_hr)) 
{ 

    m_hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void **)&m_pWApp); 
    if(FAILED(m_hr)) m_pWApp=NULL; 
} 

我使用这像example

自动化Word但现在我需要使用方法从界面IOleCommandTarget::Exec的隐藏菜单栏开放词。我知道用这种方法是可能的。

我的问题是,我怎么能得到IOleCommandTarget使用它来调用Exec,当然在例子中有可能使用IDispatch行。

回答

2

你的代码是正确的,只需添加:

LPOLECOMMANDTARGET lpOleCommandTarget = NULL; 
lpDispatch->QueryInterface(IID_IOleCommandTarget, (void**)&lpOleCommandTarget); 

IOleCommandTarget* target; 
disp->QueryInterface (IID_IOleCommandTarget, (void **) &target); 

然后**lpOleCommandTarget->Exec(...);**

例如:

lpOleCommandTarget->Exec(NULL, OLECMDID_PRINT, 0, NULL,NULL); 
+0

这将返回我E_NOINTERFACE。 –

+0

您需要为您的OLE对象找到OleCommandTarget(QueryInterface的第一个参数)的正确IID。 –

+0

请参阅http://www.codeguru.com/cpp/com-tech/activex/misc/article.php/c2667/Active-Document-Containers.htm –