是否可以使用extern和override修饰符指定函数?

时间:2011-03-11 00:07:47

标签: c# .net windows

我正试图覆盖user32.dll中外部函数的行为,因为我不想显示某个窗口。

我想做的是:

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

但这不起作用,因为我收到以下错误:

  

...找不到合适的方法来覆盖

  

...不能是extern并声明一个正文

有没有办法模拟我想要做的事情?

2 个答案:

答案 0 :(得分:3)

如果调用GetSystemMenu的源代码在您的控件范围内,那么您可以提供替代GetSystemMenu,它会在大多数情况下委托给真实的代码,但会针对您的特殊情况执行不同的操作。< / p>

如果调用GetSystemMenu的源代码不在您的控件之内,那么您将需要使用钩子。在这种情况下,您需要修改user32.GetSystemMenu行为完全超出代码库的行为。

答案 1 :(得分:2)

我认为您的问题源于您非法向外部方法声明添加实现。

C#规范(10.6.7外部方法)声明:

  

因为外部方法声明   提供没有实际的实现,   方法体外部方法   只需一个分号。一个   外部方法可能不是通用的。