⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 回调方式的事件实现.txt

📁 C&C++论坛精华
💻 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 + -