如何使用反射在应用程序域中创建委托的实例?
我有一个 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
我得到错误:
未处理的异常:System.MissingMethodException:找不到类型“MyNamespace.MyDelegate”的构造函数。
所以我假设我不能使用CreateInstanceAndUnwrap()
. 所以我的问题是,我如何创建一个?
如果您想知道,这里是委托定义:
namespace MyNamespace
{
public delegate string MyDelegate(int fieldId, int size);
}