我正试图覆盖user32.dll
中外部函数的行为,因为我不想显示某个窗口。
我想做的是:
[DllImport("user32.dll")]
public extern override IntPtr GetSystemMenu(IntPtr hMenu, bool bRevert)
{
return new IntPtr();
}
但这不起作用,因为我收到以下错误:
...找不到合适的方法来覆盖
和
...不能是extern并声明一个正文
有没有办法模拟我想要做的事情?
答案 0 :(得分:3)
如果调用GetSystemMenu
的源代码在您的控件范围内,那么您可以提供替代GetSystemMenu
,它会在大多数情况下委托给真实的代码,但会针对您的特殊情况执行不同的操作。< / p>
如果调用GetSystemMenu
的源代码不在您的控件之内,那么您将需要使用钩子。在这种情况下,您需要修改user32.GetSystemMenu
行为完全超出代码库的行为。
答案 1 :(得分:2)
我认为您的问题源于您非法向外部方法声明添加实现。
C#规范(10.6.7外部方法)声明:
因为外部方法声明 提供没有实际的实现, 方法体外部方法 只需一个分号。一个 外部方法可能不是通用的。