📄 回调方式的事件实现.txt
字号:
作者:rick1126
email: rickzhang@sina.com
日期:7/7/2001 6:37:45 PM
服务端 -- IDL:
// Chapter7_Server.idl : IDL source for Chapter7_Server.dll
//
// This file will be processed by the MIDL tool to
// produce the type library (Chapter7_Server.tlb) and marshalling code.
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid( 6E8087CE-C144-4eea-B48A-2D9FD376E8FA ),
helpstring( "ICallBack Interface" ),
pointer_default(unique)
]
interface ICallBack: IUnknown //回调接口
{
//事件对应的方法
[helpstring("method ComputationComplete")] HRESULT ComputationComplete( long lResult );
};
[
object,
uuid(CE4BD5E1-B808-4617-91F0-2B4728290D4F),
helpstring("IMath Interface"),
pointer_default(unique)
]
interface IMath : IUnknown
{
//组件自身方法, 如果需要触发事件, 需要在适当的地方添加
/*
if ( m_pCallBack )
m_pCallBack->ComputationComplete( lResult );
*/
[helpstring("method Add")] HRESULT Add([in]long lOp1, [in]long lOp2 );
[helpstring("method Subtract")] HRESULT Subtract([in]long lOp1, [in]long lOp2 );
[helpstring("method Multiply")] HRESULT Multiply([in]long lOp1, [in]long lOp2 );
[helpstring("method Divide")] HRESULT Divide([in]long lOp1, [in]long lOp2 );
//回调接口维护方法
// 其实其中的ICallBack只是一个ATL的公开的回调接口, 需要组件提供一个成员变量保存这个ICallBack实例
// 下列函数的相应实现:
/*
//ICallBack
STDMETHODIMP CMath::Advise( ICallBack *pCallBack )
{
m_pCallBack = pCallBack;
m_pCallBack->AddRef();
return S_OK;
}
STDMETHODIMP CMath::Unadvise()
{
m_pCallBack->Release();
m_pCallBack = 0;
return S_OK;
}
*/
[helpstring("method Advise")] HRESULT Advise([in]ICallBack* pCallBack);
[helpstring("method Unadvise")] HRESULT Unadvise();
};
[
uuid(E208EDBD-30BF-4868-9D46-133E66C60C87),
version(1.0),
helpstring("Chapter7_Server 1.0 Type Library")
]
library CHAPTER7_SERVERLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(F257585E-5190-4E7C-B5B2-990B5FD3DA5C),
helpstring("Math Class")
]
coclass Math
{
[default]interface IMath;
interface ICallBack;
};
};
事件的好处就是异步...
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -