2012-11-28 77 views
0

如何,使用反射,在應用程序域創建委託的實例?在一個AppDomain中創建一個委託

我有一個C++/CLI DLL從中我動態加載C#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 

我得到的錯誤:

Unhandled Exception: System.MissingMethodException: Constructor on type 'MyNamespace.MyDelegate' not found.

所以我假設我無法使用CreateInstanceAndUnwrap()創建代理的實例。所以我的問題是,我如何創建一個?

在你不知道的情況下,這裏是委託定義:

namespace MyNamespace 
{ 
    public delegate string MyDelegate(int fieldId, int size); 
} 

回答