2010-04-21 2 views
2

ETA: Я использую Visual Studio 2008 Express Edition.Странная ошибка WndProc .Net. VB.Net более конкретно

Если я переопределяю WndProc и как-то испортил, я, как правило, откажусь от комментариев, пока он не сработает.

Странная вещь с WndProc, хотя это вы можете лишить его вниз:

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

и он по-прежнему бросает ошибку.

Мне нужно удалить код и перепечатать его, чтобы сбросить ошибку.

Кто-нибудь еще испытал это?

ETA:

Ответил ниже Крис Хаас.

Я не понял, но эта проблема возникла только тогда, когда я использовал код из отражателя. Reflector mis-translates to vb.net и вставляет дополнительные скобки в вызовы базы WndProc.

+1

что ошибка? – Andrey

+0

Его ошибка создания дескриптора окна: System.Windows.Forms.NativeWindow.CreateHandle (CreateParams cp) – Jules

+0

Это так странно. Я заработал, отрезав весь код и переопределив его. Затем я вставил код обратно пополам и продолжал тестирование, чтобы убедиться, что все в порядке. В конце концов я закончил со всем кодом там, и он сработал. Затем я попробовал копировать и вставлять весь блок кода там ... это не работает! – Jules

ответ

4

Когда вы завершаете аргумент в скобках, вы переопределяете вызов 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 
+0

Улыбается, похоже, что это он. Код, с которого я начинал, был от рефлектора, который неверно переводится на vb.net и вставляет скобки, когда их там не должно быть. Тайна решена! – Jules

Смежные вопросы