C语言库函数的原型,有用的拿去

源代码在线查看: event.h

软件大小: 3272 K
上传用户: kens
关键词: C语言 库函数 原型
下载地址: 免注册下载 普通下载 VIP

相关代码

				/***
				*event.h
				*
				*       Copyright (c) Microsoft Corporation. All rights reserved.
				*
				*Purpose:   delegate_proxy_factory class
				*
				*       [Public]
				*
				****/
				
				#pragma once
				
				#ifndef __cplusplus_cli
				#error ERROR: msclr libraries are not compatible with /clr:oldSyntax
				#endif  /* __cplusplus_cli */
				
				#include 
				
				namespace msclr {
				    namespace delegate_map {
				        namespace internal {
				
				        template  class delegate_proxy_factory
				        {
				            typedef typename CLASS::delegate_proxy_type proxy_type;
				            gcroot m_gc_managed_native_delegate_proxy;
				
				            public:
				            delegate_proxy_factory() {}
				
				            virtual ~delegate_proxy_factory()
				            {
				                if((proxy_type^)m_gc_managed_native_delegate_proxy != nullptr)
				                {
				                    m_gc_managed_native_delegate_proxy->detach();
				                }
				            }
				
				            proxy_type^ get_proxy(CLASS* pNativeTarget)
				            {
				                if((proxy_type^)m_gc_managed_native_delegate_proxy == nullptr)
				                {
				                    m_gc_managed_native_delegate_proxy = gcnew proxy_type(pNativeTarget);
				                }
				                return (proxy_type^)m_gc_managed_native_delegate_proxy;
				            }
				        };
				
				        }
				    }
				}
				
				
				#define BEGIN_DELEGATE_MAP(CLASS)\
				        ref class delegate_proxy_type;\
				        msclr::delegate_map::internal::delegate_proxy_factory m_delegate_map_proxy;\
				        \
				        ref class delegate_proxy_type\
				        {\
				                CLASS* m_p_native_target;\
				        public:\
				                delegate_proxy_type(CLASS* pNativeTarget) : m_p_native_target(pNativeTarget) {}\
				                void detach() { m_p_native_target = NULL; }
				
				#define EVENT_DELEGATE_ENTRY(MEMBER,ARG0,ARG1)\
				        void MEMBER(ARG0 arg0,ARG1 arg1)\
				        {\
				                if(m_p_native_target == NULL)\
				                throw gcnew System::ArgumentNullException("Delegate call failed: Native sink was not attached or has already detached from the managed proxy (m_p_native_target == NULL). Hint: see if native sink was destructed or not constructed properly");\
				                \
				                m_p_native_target->MEMBER(arg0,arg1);\
				        }
				
				#define END_DELEGATE_MAP()\
				        };
				
				#define MAKE_DELEGATE(DELEGATE,MEMBER)\
				        gcnew DELEGATE(m_delegate_map_proxy.get_proxy(this),&delegate_proxy_type::MEMBER)
							

相关资源