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的事件响应函数
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的事件响应函数
opcGroup.QueryStdInterfaces(ccc, (void**)&opcEventP);opcGroup肯定是能用的 , 但是 opcEventP 执行结果是 0呀 ,事件响应肯定不是这么做
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));