【问题标题】:Strange WndProc bug in .Net. VB.Net more specifically.Net 中奇怪的 WndProc 错误。 VB.Net 更具体地说
【发布时间】:2010-04-21 15:43:42
【问题描述】:

ETA:我使用 Visual Studio 2008 Express Edition。

如果我重写 WndProc 并以某种方式搞砸了,我通常会通过注释掉代码来回溯,直到它再次工作为止。

WndProc 的奇怪之处在于您可以将其简化为:

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    MyBase.WndProc((m))
End Sub

它仍然会抛出错误。

我必须删除代码并重新输入以重置错误。

还有其他人经历过这种情况吗?

预计到达时间:

由 Chris Haas 在下面回答。

我没有意识到,但这个问题一定只有在我使用反射器的代码时才会出现。反射器错误地转换为 vb.net 并将额外的括号插入到对 WndProc 基础的调用中。

【问题讨论】:

  • 这是一个“创建窗口句柄时出错”:System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
  • 太奇怪了。我通过删除所有代码并重新覆盖来让它工作。然后我将代码一点一点地粘贴回来并继续测试以确保它没问题。最终我得到了那里的所有代码并且它工作了。然后我尝试将整个代码块复制并粘贴在那里......它不起作用!

标签: c# .net vb.net wndproc


【解决方案1】:

当您将参数括在括号中时,您将覆盖ByRef 调用,而是将其称为ByVal。见Argument Not Being Modified by Procedure Call - Underlying Variable

只需将代码更改为:

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    MyBase.WndProc(m)
End Sub

【讨论】:

  • 干杯,看起来就是这样。我开始使用的代码来自反射器,它错误地转换为 vb.net,并在括号不应该存在时插入括号。谜团解开了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多