作者:小杰01234 | 来源:互联网 | 2023-08-28 13:09
hr = WorkSheet->m_Dispatch->QueryInterface(IID_IOleObject, (void**)&pSheet)
上面执行失败。
---------------------------------------------------------------
hr = WorkSheet->m_Dispatch->QueryInterface(IID_IUnknown, (void**)&punk);
if(SUCCEEDED(hr))
{
hr = punk->QueryInterface(IID_IOleObject, (void**)&pSheet); //<==失败
punk->Release();
}
本人以前没搞过COM编程,如果从IDispatch接口找到IOleObject接口?
请高手帮忙!
5 个解决方案
这个对象支持IOleObject接口吗?看看他的类型库。
方法是对的,对象错了
试试文档和Application对象
TO eduyu:
WorkSheet一定有IOleObject接口,因为使用CoCreateInstance可以直接从IOleObject创建对象实例(CLSID:"Excel.Sheet")。
TO jiangsheng:
蒋大侠,请仔细指点一下好吗?
我要实现的是取Excel的一个Sheet或Word的一个Document的IOleObject接口,本人不是写VC的,对COM编程更不了解,请给个获取Sheet的IOleObject接口的例子好吗?
我用代码试了一下,Excel.Application对象好象不能从IOleObject接口创建,只能从IDispatch创建(我也用从类工厂创建过也没成功,IDispatch可以成功),我的理解是,如果从Application的IDispatch接口去 Invok WorkBooks.add再到Sheet,得到的也只是一个Sheet的IDispatch接口,与直接使用Excel9.h创建的应该是一个效果,不知道理解得对不对。
所以我现在是用直接从Excel9.h的_Application类创建对象,但是_Application一样无法QueryInterface得到IOleObject。
如蒙指点不胜感激。
我的邮箱是xxsoft@tom.com
TO jiangsheng:
蒋老师,是我错了
hr = ExcelApp.m_lpDispatch->QueryInterface(IID_IOleObject, (void**)&pOle); //成功
hr = WorkBook.m_lpDispatch->QueryInterface(IID_IOleObject, (void**)&pOle); //成功
hr = WorkSheet.m_lpDispatch->QueryInterface(IID_IOleObject, (void**)&pOle); //失败
WorkSheet不能取IOleObject接口???我如何从ActiveWorkBook或ExcelApp得到ActiveSheet的IOleObject?
请指点一下。