Функция call_in_appdomain
Выполняет функцию в указанном домене приложения.
Синтаксис
template <typename ArgType1, ...typename ArgTypeN>
void call_in_appdomain(
DWORD appdomainId,
void (*voidFunc)(ArgType1, ...ArgTypeN) [ ,
ArgType1 arg1,
...
ArgTypeN argN ]
);
template <typename RetType, typename ArgType1, ...typename ArgTypeN>
RetType call_in_appdomain(
DWORD appdomainId,
RetType (*nonvoidFunc)(ArgType1, ...ArgTypeN) [ ,
ArgType1 arg1,
...
ArgTypeN argN ]
);
Параметры
appdomainId
Домен приложения, в котором необходимо вызвать функцию.
voidFunc
Указатель на void
функцию, принимающую N-параметры (0 <= N <= 15).
nonvoidFunc
Указатель на не-функциюvoid
, принимающую N-параметры (0 <= N <= 15).
arg1... argN
Нулевая до 15 параметров, передаваемых voidFunc
в другой домен приложения или nonvoidFunc
в другом домене приложения.
Возвращаемое значение
Результат выполнения voidFunc
или nonvoidFunc
в указанном домене приложения.
Замечания
Аргументы передаваемой call_in_appdomain
функции не должны быть типами CLR.
Пример
// msl_call_in_appdomain.cpp
// compile with: /clr
// Defines two functions: one takes a parameter and returns nothing,
// the other takes no parameters and returns an int. Calls both
// functions in the default appdomain and in a newly-created
// application domain using call_in_appdomain.
#include <msclr\appdomain.h>
using namespace System;
using namespace msclr;
void PrintCurrentDomainName( char* format )
{
String^ s = gcnew String(format);
Console::WriteLine( s, AppDomain::CurrentDomain->FriendlyName );
}
int GetDomainId()
{
return AppDomain::CurrentDomain->Id;
}
int main()
{
AppDomain^ appDomain1 = AppDomain::CreateDomain( "First Domain" );
call_in_appdomain( AppDomain::CurrentDomain->Id,
&PrintCurrentDomainName,
(char*)"default appdomain: {0}" );
call_in_appdomain( appDomain1->Id,
&PrintCurrentDomainName,
(char*)"in appDomain1: {0}" );
int id;
id = call_in_appdomain( AppDomain::CurrentDomain->Id, &GetDomainId );
Console::WriteLine( "default appdomain id = {0}", id );
id = call_in_appdomain( appDomain1->Id, &GetDomainId );
Console::WriteLine( "appDomain1 id = {0}", id );
}
Выходные данные
default appdomain: msl_call_in_appdomain.exe
in appDomain1: First Domain
default appdomain id = 1
appDomain1 id = 2
Требования
Файл<заголовка msclr\appdomain.h>
Msclr пространства имен