VC中响应COM组件的事件失败,高分求助高人啊!!
我有一个普通的COM组件,其中有两个事件,我想在MFC Dialog中使用该组件并响应其事件,我生成了一个事件响应类,并实现了接口,该类程序全部由VC 2010自动生成,代码如下:
我在Dialog中使用方法如下:
其中声明如下:
调试时,发现函数UpdateUI或者PrePrint都没有进入,不知怎么回事,请高人帮帮忙啊,谢谢啦!!
// DSSimpleObjSink.h : Declaration of the CDSSimpleObjSink
#pragma once
#include "resource.h" // main symbols
#include "Test in VC_i.h"
#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
#endif
using namespace ATL;
// CDSSimpleObjSink
class ATL_NO_VTABLE CDSSimpleObjSink :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CDSSimpleObjSink, &CLSID_DSSimpleObjSink>,
public IDispatchImpl<IDSSimpleObjSink, &IID_IDSSimpleObjSink, &LIBID_TestinVCLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public IDispatchImpl<_IDSSimpleObjEvents, &__uuidof(_IDSSimpleObjEvents), &LIBID_DataEngineTestLib, /* wMajor = */ 1>
{
public:
CDSSimpleObjSink()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_DSSIMPLEOBJSINK)
DECLARE_NOT_AGGREGATABLE(CDSSimpleObjSink)
BEGIN_COM_MAP(CDSSimpleObjSink)
COM_INTERFACE_ENTRY(IDSSimpleObjSink)
COM_INTERFACE_ENTRY2(IDispatch, _IDSSimpleObjEvents)
COM_INTERFACE_ENTRY(_IDSSimpleObjEvents)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
// _IDSSimpleObjEvents Methods
public:
STDMETHOD(UpdateUI)(long BusinessID)
{
int i = BusinessID;
return 1;
}
STDMETHOD(PrePrint)(BSTR * PrintContent)
{
int i = 0;
return 1;
}
};
OBJECT_ENTRY_AUTO(__uuidof(DSSimpleObjSink), CDSSimpleObjSink)
我在Dialog中使用方法如下:
HRESULT hr = CoCreateInstance(CLSID_DSSimpleObj, NULL, CLSCTX_INPROC_SERVER,
IID_IDSSimpleObj, (LPVOID*)&m_pDSSimpleObj);
if (FAILED(hr))
{
m_pDSSimpleObj = 0;
MessageBox(_T("Create DSSimpleObj failed."));
return false;
}
//CComPtr<IConnectionPoint> pPC;
CComQIPtr<IConnectionPointContainer, &__uuidof(IConnectionPointContainer)> pCPC(m_pDSSimpleObj);
pCPC->FindConnectionPoint(DIID__IDSSimpleObjEvents, &m_pPC);
CComPtr<IUnknown> pUnk;
//CDSSimpleObjSink* pDSSimpleObjEvent = new CComObject<CDSSimpleObjSink>;
m_pDSSimpleObjEvent = new CComObject<CDSSimpleObjSink>;
m_pDSSimpleObjEvent->QueryInterface(IID_IUnknown, (void**)&pUnk);
m_pPC->Advise(pUnk, &m_dwCookie);
其中声明如下:
CComPtr<IDSSimpleObj> m_pDSSimpleObj;
DWORD m_dwCookie;
CDSSimpleObjSink* m_pDSSimpleObjEvent;
CComPtr<IConnectionPoint> m_pPC;
调试时,发现函数UpdateUI或者PrePrint都没有进入,不知怎么回事,请高人帮帮忙啊,谢谢啦!!
...全文
相关推荐
com组件VC6.0
com组件程序VC6.0下 com组件程序VC6.0下 com组件程序VC6.0下 com组件程序VC6.0下
COM组件VC6.0调试方法
针对在VC6.0下,对COM组件的调试方法,自己的工作经历,和大家分享一下
vc调用matlab 的com组件
VC++调用matlab的com组件,文档中包含的例程是经过测试的,能够实现。并讲述了怎么在没有安装MATLAB的电脑上运行。
c++如何采用com组件的方法直接调用动态库
com组件方法调用dll
用VB来调用VC编写的COM组件(dll)
这个jabbercom.dll不需要JAVA jabbercom.dll是com,所以要regsvr32 jabbercom.dll


