vc如何调用ole的事件

RGBbutterfly 2009-08-11 05:01:34
vc里面 #import “opcautoda.dll" 一个自动化 (OLE)控件,
struct __declspec(uuid("28e68f9b-8d75-11d1-8dc3-3c302a000000"))
OPCGroup;
// [ default ] interface IOPCGroup
// [ default, source ] dispinterface DIOPCGroupEvent
事件定义如下:
DIOPCGroupEvent : IDispatch
{
//
// Wrapper methods for error-handling
//

// Methods:
HRESULT DataChange (
long TransactionID,
long NumItems,
SAFEARRAY * * ClientHandles,
SAFEARRAY * * ItemValues,
SAFEARRAY * * Qualities,
SAFEARRAY * * TimeStamps );
HRESULT AsyncReadComplete (
long TransactionID,
long NumItems,
SAFEARRAY * * ClientHandles,
SAFEARRAY * * ItemValues,
SAFEARRAY * * Qualities,
SAFEARRAY * * TimeStamps,
SAFEARRAY * * Errors );
HRESULT AsyncWriteComplete (
long TransactionID,
long NumItems,
SAFEARRAY * * ClientHandles,
SAFEARRAY * * Errors );
HRESULT AsyncCancelComplete (
long CancelID );
},
vb里面定义 group 对象时 用了withvent,c# 直接可以看到事件响应函数 on********; 但是在vc里面 却只能看到属性和方法,怎么在vc里面调用写group的事件响应函数
...全文
507 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
RGBbutterfly 2009-08-12
  • 打赏
  • 举报
回复
谢了,再试下
wshcdr 2009-08-12
  • 打赏
  • 举报
回复
1)工程里实现DIOPCGroupEvent接口
WaistCoatX 2009-08-11
  • 打赏
  • 举报
回复
1)工程里实现DIOPCGroupEvent接口
2)通过ATL的AtlAdvise进行绑定

MSDN例子:

LPUNKNOWN m_pSourceUnk;
LPUNKNOWN m_pSinkUnk;
DWORD m_dwCustCookie;

// create source object
HRESULT hr = CoCreateInstance (CLSID_MyComponent, NULL, CLSCTX_ALL,
IID_IUnknown, (LPVOID*)&m_pSourceUnk);
_ASSERT (SUCCEEDED (hr));

// Create sink object. CMySink is a CComObjectRootEx-derived class
// that implements the event interface methods.
CComObject<CMySink> *pSinkClass;
CComObject<CMySink>::CreateInstance (&pSinkClass);
hr = pSinkClass->QueryInterface (IID_IUnknown, (LPVOID*)&m_pSinkUnk);
_ASSERT (SUCCEEDED (hr));

hr = AtlAdvise (m_pSourceUnk, m_pSinkUnk, IID__IMyEvent, &m_dwCustCookie);
_ASSERT (SUCCEEDED (hr));
RGBbutterfly 2009-08-11
  • 打赏
  • 举报
回复
况且这里 group 和 DIOPCGroupEvent 是一个接口 , 问题是怎么写事件响应
RGBbutterfly 2009-08-11
  • 打赏
  • 举报
回复
那肯定都做了,问题是怎么找到事件的接口

DIOPCGroupEvent *opcEventP;

IID ccc=_uuidof(DIOPCGroupEvent);
opcGroup.QueryStdInterfaces(ccc, (void**)&opcEventP);

opcGroup肯定是能用的 , 但是 opcEventP 执行结果是 0呀 ,

事件响应肯定不是这么做
zoulie 2009-08-11
  • 打赏
  • 举报
回复
先注册组件,
然后获取接口,
通过接口就可以调用了

3,245

社区成员

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

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