Объявите тип делегата, чтобы соответствовать сигнатуре метода - PullRequest
0 голосов
/ 19 мая 2018

Есть ли способ объявить тип делегата, который соответствует данной функции?То есть я не хочу копировать и вставлять параметры и должен помнить, чтобы обновлять делегата в любое время для изменения сигнатуры функции.В идеале, что-то вроде этого:

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 места, где я должен вручную обновить параметры функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...