2012-11-28 2 views
0

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); 
} 

Répondre

0

Jetez un oeil à la méthode AppDomain.DoCallBack. Faites attention aux types utilisés dans votre méthode actuelle. Vous devrez peut-être charger d'autres assemblys manuellement ou définir les base direcory et private bin path de l'autre AppDomain comme étant les mêmes avec votre principal.

Questions connexes