Server IDL如下:import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(871870A0-63C8-4C92-9106-4E9F003588D6),

helpstring("ICalcComm Interface"),
pointer_default(unique)
]
interface ICalcComm : IUnknown
{
[helpstring("method CalcSqr")] HRESULT CalcSqr([in] int i_In,[out] int * i_Out);
}; [
object,
uuid(871870A0-63C8-4C92-9106-4E9F003588D7),

helpstring("ICalcCommEvent Interface"),
pointer_default(unique)
]
interface ICalcCommEvent : IUnknown
{
[helpstring("method GetCurrentDate")] HRESULT GetCurrentDate([in] int * idate);
};[
uuid(4BB635E5-96F7-45EA-B053-7EECEDAC7488),
version(1.0),
helpstring("ComServer 1.0 Type Library")
]
library COMSERVERLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb"); [
uuid(3AD41525-AF3A-470C-B4E2-816E09E14988),
helpstring("CalcComm Class")
]
coclass CalcComm
{
[default] interface ICalcComm;
[source] interface ICalcCommEvent;
};
};Client端如下:
   hResult = pContainer->FindConnectionPoint(callid, &m_pConnectionPoint); 
上句返回值为S_OK,
hResult = m_pConnectionPoint->Advise((IUnknown*)m_ICallBack,
&m_dwCookie);
时,跳转到
HRESULT IConnectionEvent::QueryInterface(REFIID riid,
 void** ppv)
{
// riid = Marsel ?
if(riid == IID_IUnknown)
{
*ppv = (IUnknown*)((ICalcCommEvent*)this);
}
else if(riid == IID_ICalcCommEvent)
{
*ppv = (ICalcCommEvent*)this;
}
else 
{
*ppv = NULL;
return E_NOINTERFACE;
}// AddRef();
return S_OK;
}
中riid参数为IID_IMarshal
晕了,SOS

解决方案 »

  1.   

    用ATL呀, 帮你自动实现连接点. 以下是ATL生成的IDL
    import "oaidl.idl";
    import "ocidl.idl";
    [
    object,
    uuid(26DB472B-E9BD-4BF2-B1B7-419691A532F1),
    dual,
    helpstring("Iaa Interface"),
    pointer_default(unique)
    ]
    interface Iaa : IDispatch
    {
    };[
    uuid(E7782A10-6AB2-4FB9-B850-5DB975C7F6AA),
    version(1.0),
    helpstring("sss 1.0 Type Library")
    ]
    library SSSLib
    {
    importlib("stdole32.tlb");
    importlib("stdole2.tlb"); [
    uuid(5C54892A-1E9B-4B34-9358-4E9A0CA24A35),
    helpstring("_IaaEvents Interface")
    ]
    dispinterface _IaaEvents
    {
    properties:
    methods:
    [id(1), helpstring("method event")] HRESULT event();
    }; [
    uuid(6BC50F76-DB01-4420-B98C-62477AF0E824),
    helpstring("aa Class")
    ]
    coclass aa
    {
    [default] interface Iaa;
    [default, source] dispinterface _IaaEvents;
    };
    };
      

  2.   

    去看COM 组件设计与应用系列文章中关于连接点的介绍,http://www.vckbase.com/网站。