3,248
社区成员




// 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)
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;
// DSSimpleObj.h : Declaration of the CDSSimpleObj
#pragma once
#include "resource.h" // main symbols
#include "DataEngineTest_i.h"
#include "_IDSSimpleObjEvents_CP.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;
// CDSSimpleObj
class ATL_NO_VTABLE CDSSimpleObj :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CDSSimpleObj, &CLSID_DSSimpleObj>,
public IConnectionPointContainerImpl<CDSSimpleObj>,
public CProxy_IDSSimpleObjEvents<CDSSimpleObj>,
public IDSSimpleObj
{
public:
CDSSimpleObj()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_DSSIMPLEOBJ)
BEGIN_COM_MAP(CDSSimpleObj)
COM_INTERFACE_ENTRY(IDSSimpleObj)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
END_COM_MAP()
BEGIN_CONNECTION_POINT_MAP(CDSSimpleObj)
CONNECTION_POINT_ENTRY(__uuidof(_IDSSimpleObjEvents))
END_CONNECTION_POINT_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
protected:
CComBSTR m_bstrStationID;
public:
STDMETHOD(get_StationID)(BSTR* pVal);
STDMETHOD(put_StationID)(BSTR newVal);
STDMETHOD(Enqueue)(LONG BusinessID);
};
OBJECT_ENTRY_AUTO(__uuidof(DSSimpleObj), CDSSimpleObj)
#pragma once
template<class T>
class CProxy_IDSSimpleObjEvents :
public ATL::IConnectionPointImpl<T, &__uuidof(_IDSSimpleObjEvents)>
{
public:
HRESULT Fire_UpdateUI(LONG BusinessID)
{
HRESULT hr = S_OK;
T * pThis = static_cast<T *>(this);
int cConnections = m_vec.GetSize();
for (int iConnection = 0; iConnection < cConnections; iConnection++)
{
pThis->Lock();
CComPtr<IUnknown> punkConnection = m_vec.GetAt(iConnection);
pThis->Unlock();
IDispatch * pConnection = static_cast<IDispatch *>(punkConnection.p);
if (pConnection)
{
CComVariant avarParams[1];
avarParams[0] = BusinessID;
avarParams[0].vt = VT_I4;
CComVariant varResult;
DISPPARAMS params = { avarParams, NULL, 1, 0 };
hr = pConnection->Invoke(1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, ¶ms, &varResult, NULL, NULL);
}
}
return hr;
}
HRESULT Fire_PrePrint(BSTR * PrintContent)
{
HRESULT hr = S_OK;
T * pThis = static_cast<T *>(this);
int cConnections = m_vec.GetSize();
for (int iConnection = 0; iConnection < cConnections; iConnection++)
{
pThis->Lock();
CComPtr<IUnknown> punkConnection = m_vec.GetAt(iConnection);
pThis->Unlock();
IDispatch * pConnection = static_cast<IDispatch *>(punkConnection.p);
if (pConnection)
{
CComVariant avarParams[1];
avarParams[0].byref = PrintContent;
avarParams[0].vt = VT_BSTR|VT_BYREF;
CComVariant varResult;
DISPPARAMS params = { avarParams, NULL, 1, 0 };
hr = pConnection->Invoke(2, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, ¶ms, &varResult, NULL, NULL);
}
}
return hr;
}
};
// DataEngineTest.idl : IDL source for DataEngineTest
//
// This file will be processed by the MIDL tool to
// produce the type library (DataEngineTest.tlb) and marshalling code.
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(1BA56D84-2F74-4C03-AD2B-030187D1F8C5),
pointer_default(unique)
]
interface IDSSimpleObj : IUnknown{
[propget] HRESULT StationID([out, retval] BSTR* pVal);
[propput] HRESULT StationID([in] BSTR newVal);
[] HRESULT Enqueue([in] LONG BusinessID);
};
[
uuid(B001CAAF-2AF4-4991-BD97-6FBBD4915D12),
version(1.0),
]
library DataEngineTestLib
{
importlib("stdole2.tlb");
[
uuid(BB4072F1-E58A-41D1-9BBF-068B2C471A42)
]
dispinterface _IDSSimpleObjEvents
{
properties:
methods:
[id(1)] HRESULT UpdateUI([in] LONG BusinessID);
[id(2)] HRESULT PrePrint([in,out] BSTR* PrintContent);
};
[
uuid(82452453-8CAB-472F-ACA8-03EDE01DE131)
]
coclass DSSimpleObj
{
[default] interface IDSSimpleObj;
[default, source] dispinterface _IDSSimpleObjEvents;
};
};