Перевод делегатов C # из проекта 2005 в C # 2003 - PullRequest
1 голос
/ 20 июля 2009

Я пытаюсь скомпилировать в VS2003 проект MouseTracking , созданный в C # 2005. Я исправил его, за исключением одной строки:

    proc = HookCallback;

Это дает ошибку <strong>Method 'MouseTracking.MouseTracker.HookCallback(int, System.IntPtr, System.IntPtr)' referenced without parentheses</strong>

Если я добавлю паразиты в HookCallback, я получу <strong>No overload for method 'HookCallback' takes '0' arguments</strong>

Я попытался добавить аргументы функции в виде типов, имен переменных и того и другого, но, похоже, ни один из них не работает.

Вот соответствующие определения:

    private LowLevelMouseProc proc;
    private delegate IntPtr LowLevelMouseProc (int nCode, IntPtr wParam, IntPtr lParam);
    private          IntPtr HookCallback      (int nCode, IntPtr wParam, IntPtr lParam) {…}

Есть идеи, как заставить это скомпилировать? Я бы очень хотел добавить и настроить несколько вещей.

Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 20 июля 2009
prot = new LowLevelMouseProc(HookCallBack);
3 голосов
/ 20 июля 2009

Похоже, что он использует HookCallback в качестве делегата. В C # 1 вы должны создавать делегатов, используя конструктор делегатов, вы не можете просто использовать имя метода (, как вы можете в C # 2 + ).

Посмотрите на тип proc и используйте его для создания нового делегата, например так:

proc = new LowLevelMouseProc(HookCallBack);
...