次の方法で共有


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
    N パラメーター (0<=N<=15) を取得する void 関数へのポインター。

  • nonvoidFunc
    N パラメーター (0<=N<=15) を取得する非 void 関数へのポインター。

  • arg1...argN
    他のアプリケーション ドメイン内の voidFunc または nonvoidFunc に渡される 0 ~ 15 のパラメーター。

戻り値

指定したアプリケーション ドメイン内で 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