有没有办法声明与给定函数匹配的委托类型?也就是说,我不想复制和粘贴参数,并且必须记住在任何时候更改代理更改函数签名。理想情况下,这样的事情:
class Foo
{
void APIFunction();
}
delegate APIDel = Foo.APIFunction;
允许我这样做:
function IntPtr GetAPIFunctionPointer ()
{
var foo = new Foo();
APIDel del = foo.APIFunction
IntPtr ptr = Marshal::GetFunctionPointerForDelegate(del);
return del;
}
对于上下文,我有一个基于插件的应用程序,它支持托管和非托管插件。插件API使用一组C函数指针声明。有一个托管接口,其中包含镜像C API的方法。对于托管插件,我实现了接口,创建了接口方法的委托,并将这些委托编组为本机端可以调用的函数指针。我正在尝试消除手动委托声明,因为这使得我必须手动更新函数参数3个位置。