📄 appdomain.h
字号:
/***
*appdomain.h
*
* Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose: Utitily for cross App Domain Calls
*
* [Public]
*
****/
#pragma once
#if !defined (_INC_MSCLR_APPDOMAIN)
#ifndef __cplusplus_cli
#error ERROR: msclr libraries require /clr and are not compatible with /clr:oldSyntax
#endif /* __cplusplus_cli */
#ifdef _M_CEE_PURE
#error ERROR: msclr appdomain helpers can only be used in mixed mode. Use a cross-domain delegate in pure mode
#endif /* _M_CEE_PURE */
#include <mscoree.h>
#include <crtdbg.h>
#if defined (_M_IX86)
#define _MSCLR_STDCALL_DISTINCT 1
#elif defined (_M_IA64)
#define _MSCLR_STDCALL_DISTINCT 0
#elif defined (_M_AMD64)
#define _MSCLR_STDCALL_DISTINCT 0
#else /* defined (_M_AMD64) */
#error Need to add setting for different CPU
#endif /* defined (_M_AMD64) */
namespace msclr
{
namespace _detail
{
/* helper functions */
inline
void validate(HRESULT hr)
{
_ASSERT(SUCCEEDED(hr));
if (FAILED(hr))
{
System::Runtime::InteropServices::Marshal::ThrowExceptionForHR(hr);
}
}
inline
System::Guid FromGUID(GUID const & guid)
{
return System::Guid( guid.Data1, guid.Data2, guid.Data3,
guid.Data4[ 0 ], guid.Data4[ 1 ],
guid.Data4[ 2 ], guid.Data4[ 3 ],
guid.Data4[ 4 ], guid.Data4[ 5 ],
guid.Data4[ 6 ], guid.Data4[ 7 ] );
}
inline
ICLRRuntimeHost *get_clr_runtime_host(void)
{
using System::Runtime::InteropServices::RuntimeEnvironment;
// Throws HR exception on failure.
ICLRRuntimeHost *pClrHost = NULL;
pClrHost = reinterpret_cast<ICLRRuntimeHost*>(
RuntimeEnvironment::GetRuntimeInterfaceAsIntPtr(
FromGUID(CLSID_CLRRuntimeHost), FromGUID(IID_ICLRRuntimeHost)).ToPointer());
return pClrHost;
}
/* callback struct */
/* __stdcall version */
#if _MSCLR_STDCALL_DISTINCT
template <typename RetType>
struct callback_stdcall_struct0
{
RetType (__stdcall *func)();
RetType retValue;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct0 *pcs = (callback_stdcall_struct0*)cookie;
pcs->retValue = pcs->func();
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1>
struct callback_stdcall_struct1
{
RetType (__stdcall *func)(ArgType1);
RetType retValue;
ArgType1 arg1;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct1 *pcs = (callback_stdcall_struct1*)cookie;
pcs->retValue = pcs->func(pcs->arg1);
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1, typename ArgType2>
struct callback_stdcall_struct2
{
RetType (__stdcall *func)(ArgType1, ArgType2);
RetType retValue;
ArgType1 arg1;
ArgType2 arg2;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct2 *pcs = (callback_stdcall_struct2*)cookie;
pcs->retValue = pcs->func(pcs->arg1, pcs->arg2);
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1, typename ArgType2, typename ArgType3>
struct callback_stdcall_struct3
{
RetType (__stdcall *func)(ArgType1, ArgType2, ArgType3);
RetType retValue;
ArgType1 arg1;
ArgType2 arg2;
ArgType3 arg3;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct3 *pcs = (callback_stdcall_struct3*)cookie;
pcs->retValue = pcs->func(pcs->arg1, pcs->arg2, pcs->arg3);
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1, typename ArgType2, typename ArgType3, typename ArgType4>
struct callback_stdcall_struct4
{
RetType (__stdcall *func)(ArgType1, ArgType2, ArgType3, ArgType4);
RetType retValue;
ArgType1 arg1;
ArgType2 arg2;
ArgType3 arg3;
ArgType4 arg4;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct4 *pcs = (callback_stdcall_struct4*)cookie;
pcs->retValue = pcs->func(pcs->arg1, pcs->arg2, pcs->arg3, pcs->arg4);
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1, typename ArgType2, typename ArgType3, typename ArgType4, typename ArgType5>
struct callback_stdcall_struct5
{
RetType (__stdcall *func)(ArgType1, ArgType2, ArgType3, ArgType4, ArgType5);
RetType retValue;
ArgType1 arg1;
ArgType2 arg2;
ArgType3 arg3;
ArgType4 arg4;
ArgType5 arg5;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct5 *pcs = (callback_stdcall_struct5*)cookie;
pcs->retValue = pcs->func(pcs->arg1, pcs->arg2, pcs->arg3, pcs->arg4, pcs->arg5);
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1, typename ArgType2, typename ArgType3, typename ArgType4, typename ArgType5, typename ArgType6>
struct callback_stdcall_struct6
{
RetType (__stdcall *func)(ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6);
RetType retValue;
ArgType1 arg1;
ArgType2 arg2;
ArgType3 arg3;
ArgType4 arg4;
ArgType5 arg5;
ArgType6 arg6;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct6 *pcs = (callback_stdcall_struct6*)cookie;
pcs->retValue = pcs->func(pcs->arg1, pcs->arg2, pcs->arg3, pcs->arg4, pcs->arg5, pcs->arg6);
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1, typename ArgType2, typename ArgType3, typename ArgType4, typename ArgType5, typename ArgType6, typename ArgType7>
struct callback_stdcall_struct7
{
RetType (__stdcall *func)(ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7);
RetType retValue;
ArgType1 arg1;
ArgType2 arg2;
ArgType3 arg3;
ArgType4 arg4;
ArgType5 arg5;
ArgType6 arg6;
ArgType7 arg7;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct7 *pcs = (callback_stdcall_struct7*)cookie;
pcs->retValue = pcs->func(pcs->arg1, pcs->arg2, pcs->arg3, pcs->arg4, pcs->arg5, pcs->arg6, pcs->arg7);
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1, typename ArgType2, typename ArgType3, typename ArgType4, typename ArgType5, typename ArgType6, typename ArgType7, typename ArgType8>
struct callback_stdcall_struct8
{
RetType (__stdcall *func)(ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8);
RetType retValue;
ArgType1 arg1;
ArgType2 arg2;
ArgType3 arg3;
ArgType4 arg4;
ArgType5 arg5;
ArgType6 arg6;
ArgType7 arg7;
ArgType8 arg8;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct8 *pcs = (callback_stdcall_struct8*)cookie;
pcs->retValue = pcs->func(pcs->arg1, pcs->arg2, pcs->arg3, pcs->arg4, pcs->arg5, pcs->arg6, pcs->arg7, pcs->arg8);
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1, typename ArgType2, typename ArgType3, typename ArgType4, typename ArgType5, typename ArgType6, typename ArgType7, typename ArgType8, typename ArgType9>
struct callback_stdcall_struct9
{
RetType (__stdcall *func)(ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9);
RetType retValue;
ArgType1 arg1;
ArgType2 arg2;
ArgType3 arg3;
ArgType4 arg4;
ArgType5 arg5;
ArgType6 arg6;
ArgType7 arg7;
ArgType8 arg8;
ArgType9 arg9;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct9 *pcs = (callback_stdcall_struct9*)cookie;
pcs->retValue = pcs->func(pcs->arg1, pcs->arg2, pcs->arg3, pcs->arg4, pcs->arg5, pcs->arg6, pcs->arg7, pcs->arg8, pcs->arg9);
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1, typename ArgType2, typename ArgType3, typename ArgType4, typename ArgType5, typename ArgType6, typename ArgType7, typename ArgType8, typename ArgType9, typename ArgType10>
struct callback_stdcall_struct10
{
RetType (__stdcall *func)(ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10);
RetType retValue;
ArgType1 arg1;
ArgType2 arg2;
ArgType3 arg3;
ArgType4 arg4;
ArgType5 arg5;
ArgType6 arg6;
ArgType7 arg7;
ArgType8 arg8;
ArgType9 arg9;
ArgType10 arg10;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct10 *pcs = (callback_stdcall_struct10*)cookie;
pcs->retValue = pcs->func(pcs->arg1, pcs->arg2, pcs->arg3, pcs->arg4, pcs->arg5, pcs->arg6, pcs->arg7, pcs->arg8, pcs->arg9, pcs->arg10);
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1, typename ArgType2, typename ArgType3, typename ArgType4, typename ArgType5, typename ArgType6, typename ArgType7, typename ArgType8, typename ArgType9, typename ArgType10, typename ArgType11>
struct callback_stdcall_struct11
{
RetType (__stdcall *func)(ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11);
RetType retValue;
ArgType1 arg1;
ArgType2 arg2;
ArgType3 arg3;
ArgType4 arg4;
ArgType5 arg5;
ArgType6 arg6;
ArgType7 arg7;
ArgType8 arg8;
ArgType9 arg9;
ArgType10 arg10;
ArgType11 arg11;
static HRESULT __stdcall callback(void *cookie)
{
HRESULT hr = E_FAIL;
if (cookie == NULL)
{
return hr;
}
callback_stdcall_struct11 *pcs = (callback_stdcall_struct11*)cookie;
pcs->retValue = pcs->func(pcs->arg1, pcs->arg2, pcs->arg3, pcs->arg4, pcs->arg5, pcs->arg6, pcs->arg7, pcs->arg8, pcs->arg9, pcs->arg10, pcs->arg11);
hr = S_OK;
return hr;
}
};
template <typename RetType, typename ArgType1, typename ArgType2, typename ArgType3, typename ArgType4, typename ArgType5, typename ArgType6, typename ArgType7, typename ArgType8, typename ArgType9, typename ArgType10, typename ArgType11, typename ArgType12>
struct callback_stdcall_struct12
{
RetType (__stdcall *func)(ArgType1, ArgType2, ArgType3, ArgType4, ArgType5, ArgType6, ArgType7, ArgType8, ArgType9, ArgType10, ArgType11, ArgType12);
RetType retValue;
ArgType1 arg1;
ArgType2 arg2;
ArgType3 arg3;
ArgType4 arg4;
ArgType5 arg5;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -