Можно ли указать функцию с модификаторами extern и override? - PullRequest
1 голос
/ 11 марта 2011

Я пытаюсь переопределить поведение внешней функции в user32.dll, потому что я не хочу, чтобы отображалось определенное окно.

Я пытаюсь сделать следующее:

    [DllImport("user32.dll")]
    public extern override IntPtr GetSystemMenu(IntPtr hMenu, bool bRevert)
    {
        return new IntPtr();
    }

но это не сработает, потому что я получаю следующие ошибки:

... не найдено подходящего метода для переопределения

и

... не может быть extern и объявить тело

Есть ли способ имитировать то, что я пытаюсь сделать?

Ответы [ 2 ]

3 голосов
/ 11 марта 2011

Если исходный код, который вызывает GetSystemMenu, находится под вашим контролем, тогда вы можете предоставить альтернативу GetSystemMenu, которая большую часть времени делегирует реальному, но в вашем особом случае делает что-то другое.

Если исходный код, который вызывает GetSystemMenu, находится вне вашего контроля, вам нужно будет использовать хуки.В этой ситуации вам нужно изменить поведение user32.GetSystemMenu, которое находится за пределами вашей кодовой базы.

2 голосов
/ 11 марта 2011

Я думаю, что ваша проблема связана с тем, что вы незаконно добавляете реализацию к объявлению внешнего метода.

Спецификация C # (10.6.7 Внешние методы) гласит:

Потому что объявление внешнего метода не обеспечивает фактическую реализацию, method-body внешнего метода просто состоит из точки с запятой. внешний метод не может быть универсальным.

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