リフレクションを使用して、アプリケーション ドメインでデリゲートのインスタンスを作成するにはどうすればよいですか?
C# DLL を動的にロードする C++/CLI DLL があります。C# DLL はネットワーク共有に配置されているため、別の AppDomain に読み込みます (PermissionSet は PermissionState.Unrestricted です)。
これは、クラスを作成するときにうまく機能します。
AppDomain^ appDomain = AppDomain::CreateDomain( ... );
Object^ obj = appDomain->CreateInstanceAndUnwrap(
assemblyName,
"MyNamespace.MyClass",
false, // ignoreCase
BindingFlags::CreateInstance | BindingFlags::Public | BindingFlags::Instance,
nullptr, // binder
args, // constructor arguments
nullptr, // culture
nullptr); // activationAttributes
ただし、同じ方法でデリゲートを作成する場合:
array<Object^>^ args = gcnew array<Object^>(1);
args[0] = MyFunctionThatIWantTheDelegateToWrap;
Object^ obj = appDomain->CreateInstanceAndUnwrap(
assemblyName,
"MyNamespace.MyDelegate",
false, // ignoreCase
BindingFlags::CreateInstance | BindingFlags::Public | BindingFlags::Instance,
nullptr, // binder
args, // constructor arguments
nullptr, // culture
nullptr); // activationAttributes
エラーが発生します:
未処理の例外: System.MissingMethodException: 型 'MyNamespace.MyDelegate' のコンストラクターが見つかりません。
したがって、を使用してデリゲートのインスタンスを作成できないと思いますCreateInstanceAndUnwrap()
。だから私の質問は、どうやって作成するのですか?
ご参考までに、デリゲートの定義を次に示します。
namespace MyNamespace
{
public delegate string MyDelegate(int fieldId, int size);
}