// CalcSink.h
class CCalcSink : public IDispEventImpl<
0,
CCalcSink,
&DIID__IMyCalcEvents,
&LIBID_CALCLib,
1,
0>
{
public:
// 事件响应
HRESULT __stdcall OnGiveResult(long vRet);
HRESULT __stdcall OnGiveResultEx(VARIANT *pvRet);
HRESULT __stdcall OnGiveVarResult(VARIANT vRet); // 构造与析构函数
CCalcSink();
virtual ~CCalcSink();
// 接收器映射
BEGIN_SINK_MAP(CCalcSink)
SINK_ENTRY_EX( 0, DIID__IMyCalcEvents, 3, OnGiveResult )
SINK_ENTRY_EX( 0, DIID__IMyCalcEvents, 2, OnGiveResultEx )
SINK_ENTRY_EX( 0, DIID__IMyCalcEvents, 1, OnGiveVarResult )
END_SINK_MAP()
};// CalcSink.cpp
#include "stdafx.h"
#include "CalcSink.h"
CCalcSink::CCalcSink()
{}CCalcSink::~CCalcSink()
{}
// 以下三个测试结果只有参数为long 的能进行自动化调度,这是为什么呢?
HRESULT CCalcSink::OnGiveVarResult(VARIANT vRet)
{
ASSERT(vRet.vt == VT_I4);
TRACE("call OnGiveResult<ret = %d>.\n", vRet.lVal);//失败
return S_OK;
}HRESULT CCalcSink::OnGiveResultEx(VARIANT *pvRet)
{
TRACE("call OnGiveResult<ret = %d>.\n", pvRet->lVal);//失败 return S_OK;
}HRESULT CCalcSink::OnGiveResult(long vRet)
{
TRACE("call OnGiveResult<ret = %d>.\n", vRet);//成功
return S_OK;
}请高手帮忙,谢谢!!!!!!!!!!!!!!!!!!!!
class CCalcSink : public IDispEventImpl<
0,
CCalcSink,
&DIID__IMyCalcEvents,
&LIBID_CALCLib,
1,
0>
{
public:
// 事件响应
HRESULT __stdcall OnGiveResult(long vRet);
HRESULT __stdcall OnGiveResultEx(VARIANT *pvRet);
HRESULT __stdcall OnGiveVarResult(VARIANT vRet); // 构造与析构函数
CCalcSink();
virtual ~CCalcSink();
// 接收器映射
BEGIN_SINK_MAP(CCalcSink)
SINK_ENTRY_EX( 0, DIID__IMyCalcEvents, 3, OnGiveResult )
SINK_ENTRY_EX( 0, DIID__IMyCalcEvents, 2, OnGiveResultEx )
SINK_ENTRY_EX( 0, DIID__IMyCalcEvents, 1, OnGiveVarResult )
END_SINK_MAP()
};// CalcSink.cpp
#include "stdafx.h"
#include "CalcSink.h"
CCalcSink::CCalcSink()
{}CCalcSink::~CCalcSink()
{}
// 以下三个测试结果只有参数为long 的能进行自动化调度,这是为什么呢?
HRESULT CCalcSink::OnGiveVarResult(VARIANT vRet)
{
ASSERT(vRet.vt == VT_I4);
TRACE("call OnGiveResult<ret = %d>.\n", vRet.lVal);//失败
return S_OK;
}HRESULT CCalcSink::OnGiveResultEx(VARIANT *pvRet)
{
TRACE("call OnGiveResult<ret = %d>.\n", pvRet->lVal);//失败 return S_OK;
}HRESULT CCalcSink::OnGiveResult(long vRet)
{
TRACE("call OnGiveResult<ret = %d>.\n", vRet);//成功
return S_OK;
}请高手帮忙,谢谢!!!!!!!!!!!!!!!!!!!!
解决方案 »
- 调用lib时出现问题?请高手帮忙解答,(分不够可以另加)
- 请高手帮忙看看系统API——RemoveDirectory为什么无法删除空文件夹
- 怎样在ListView中添加进度条啊?
- 读文件填充tree ctrl的算法
- 请问如何得到一个WAVE文件的SampleRate和Bitrate值,谢谢?
- 关于指针的指针
- 如何在运行时给Picture控件加载bmp图片?
- 怎么样在vc里面调用com中的对象呀?急,快,我要搞netmeeting!!!!!
- 难!难!难!难!难!难!钩子问题!快来帮忙!
- 请教下面三种赋值方式:enum {m_cx=7};int m_cx=7;const int m_cx=7;它们有何区别?
- 老问题了,关于如何实现GBK与UTF-8的转换(有代码)
- 关于edit框初始化时不显示初始内容的问题
HRESULT Fire_GiveResult(VARIANT vRes)
{
CComVariant varResult;
T* pT = static_cast<T*>(this);
int nConnectionIndex;
CComVariant* pvars = new CComVariant[1];
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[0] = vRes; //这里自动产生的是&vRes,而我需要的是vRes DISPPARAMS disp = { pvars, NULL, 1, 0 };
pDispatch->Invoke(0x1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, &varResult, NULL, NULL);
}
}
delete[] pvars;
return varResult.scode;
}