Comment, en utilisant la réflexion, créer une instance d'un délégué dans un domaine d'application?Créer un délégué dans un domaine d'application
J'ai une DLL C++/CLI à partir de laquelle je charge dynamiquement une DLL C#. Étant donné que la DLL C# se trouve sur un partage réseau, je le charge dans un AppDomain distinct (où PermissionSet est PermissionState.Unrestricted).
Cela fonctionne bien lors de la création des classes:
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
Cependant, lors de la création d'un délégué de la même manière:
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
je reçois l'erreur:
Unhandled Exception: System.MissingMethodException: Constructor on type 'MyNamespace.MyDelegate' not found.
Je suppose que je ne peux pas créer une instance d'un délégué en utilisant CreateInstanceAndUnwrap()
. Donc, ma question est, comment puis-je en créer un?
Si vous demandez, voici la définition du délégué:
namespace MyNamespace
{
public delegate string MyDelegate(int fieldId, int size);
}