在VC6下如何用ATL编写具有事件功能的COM组件,使得该组件可以在VB或VC下应用.
该组件的事件功能同ActiveX控件相同,就是数据有变化的时候给客户端一个消息,叫客户端去处理。
我在vc中写了这个事件,代码如下:
HRESULT Fire_msgNotif(INT msgID, INT pri, INT msgType, INT dataLen, BSTR body)
{
CComVariant varResult;
T* pT = static_cast<T*>(this);
int nConnectionIndex;
CComVariant* pvars = new CComVariant[5];
int nConnections = m_vec.GetSize();

for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
{
pT->Lock();
CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);
pT->Unlock();
IDispatch* pDispatch = reinterpret_cast<IDispatch*>(sp.p);
if (pDispatch != NULL)
{
VariantClear(&varResult);
pvars[4] = msgID;
pvars[3] = pri;
pvars[2] = msgType;
pvars[1] = dataLen;
pvars[0] = body;
DISPPARAMS disp = { pvars, NULL, 12, 0 };
pDispatch->Invoke(0x3, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, &varResult, NULL, NULL);
}
}
delete[] pvars;
return varResult.scode;

}
然后我在另外一个接口函数中数据变化时候调用Fire_msgNotif,
可是我在vb客户端调用这个dll出错,收不到任何消息,
请教怎么编写vc和vb的客户端,在回答时请举一个简单的例子示范.谢谢