Вы можете использовать делегаты C # вместо определения своих собственных.
Для делегатов, которые указывают на недействительные функции, такие как в вашем случае, вы можете использовать Action.
Вместо того, чтобы объявлять и создавать экземпляр делегата (или, в данном случае, делегата Action), вы можете вставить его непосредственно в ваш метод SetWinEventHook, как этот.Компилятор позаботится об инстанцировании.
public void SetWinEventHook(Action<IntPtr, uint, IntPtr, int, int, uint, uint> myDelegate)
{
}
Теперь, чтобы запустить функцию, на которую указывает ваш делегат, выполните это
myDelegate()
, однако проблема заключается в том, чтоДля делегата нужны 7 аргументов, которые, как вы объявили, понадобятся.
Чтобы обеспечить их передачу в качестве второго аргумента в вашем методе SetWinEventHook следующим образом:
public void SetWinEventHook(Action<IntPtr, uint, IntPtr, int, int, uint, uint> myDelegate, IntPtr a, uint b, IntPtr c, int d, int e, uint f, uint g)
{
myDelegate(a,b,c,d,e,f,g);
}
Итак, на данный момент вы, по сути,
1) Объявленыделегат
2) Создание делегата
3) Создание метода ловушки для запуска делегата / функции
Теперь все, что вам нужно сделать, это вызвать ваш SetWinEventHook и передатьв лямбда-выражении или в функции, написанной в другом месте, чтобы ваш делегат указывал на нее.
SetWinEventHook((a, b, c, d, r, f, g) => // using lambda here
{
},
new IntPtr(), 1, new IntPtr(), 2,3,4,5
);