Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Run-time error 438 - в чем причина? / 8 сообщений из 8, страница 1 из 1
03.09.2014, 11:31
    #38735922
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 438 - в чем причина?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Function LoadInGrid(ByVal ct As Object) As Long
 MsgBox ct.Name
End Function

Private Sub Control_ControlSelecting(ByVal Control As Object, Cancel As Boolean)
  Select Case TypeName(Control)
  
    Case "Label"
        LoadInGrid (Control)
   End Select
  
End Sub



Не могу понять почему возникает ошибка. В Control_ControlSelecting передается контрол лежащий на форме, падает на вызове LoadInGrid (Control) c Run-time error 438
...
Рейтинг: 0 / 0
03.09.2014, 11:53
    #38735979
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 438 - в чем причина?
Погуглил, походу это баг VB6 :( http://support.microsoft.com/kb/175616/ru
Можно обойти костылем передавая указатель на объект и потом его разыменовывая.
Но осадочек блин остался..

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
Private Declare Sub RtlMoveMemory _
  Lib "kernel32" _
 (ByRef Target As Any, _
  ByRef Source As Any, _
  ByVal Length As Long)

Public Function PtrObj(ByVal Pointer As Long) As Object
  Dim SoftRef As Object

  If Pointer = 0 Then
    Exit Function
  End If

  RtlMoveMemory SoftRef, Pointer, 4

  Set PtrObj = SoftRef

  RtlMoveMemory SoftRef, 0&, 4

FunctionExit:
  Exit Function

FunctionError:
  Set PtrObj = Nothing
  Resume FunctionExit

End Function

Public Function LoadInGrid(ByVal ct As Long) As Long
   Dim obj As Object
   Set obj = PtrObj(ct)
  MsgBox obj.Name
 End Function


Private Sub FormDesigner_ControlSelecting(ByVal Control As Object, Cancel As Boolean)
  Select Case TypeName(Control)
  
    Case "Label"
        LoadInGrid (ObjPtr(Control))
   End Select
  
End Sub
...
Рейтинг: 0 / 0
03.09.2014, 12:18
    #38736026
Run-time error 438 - в чем причина?
Eolt,

0) по описанию в стартовом сообщении ошибка не воспроизводится;
1) поинтересуйтесь синтаксисом оператора Call;
2) поинтересуйтесь типом выражения (Control) применительно к передаваемому параметру;
3) поинтересуйтесь вычислением выражений вообще, и значений по умолчанию в частности;
4) поинтересуйтесь оператором TypeOf ... Is

и вот тогда делайте выводы об ошибках, глюках, багах.
...
Рейтинг: 0 / 0
03.09.2014, 12:24
    #38736038
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 438 - в чем причина?
13-й квартал,

Спасибо за подсказку! Я с VB6 почти не знаком, и простые ситуации иногда ставят в тупик
...
Рейтинг: 0 / 0
03.09.2014, 12:35
    #38736056
Run-time error 438 - в чем причина?
Eolt,

да, там (как и везде) есть несколько граблей, по которым все проходят.
...
Рейтинг: 0 / 0
03.09.2014, 15:00
    #38736279
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 438 - в чем причина?
Попробуйте объявлять без указания типа:
Код: vbnet
1.
Public Function LoadInGrid(ByVal ct) As Long
...
Рейтинг: 0 / 0
04.09.2014, 03:39
    #38736974
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 438 - в чем причина?
Eolt,

Я никогда не передавал объекты ByVal, всегда ByRef. И вот тебе пример почему:

http://www.devx.com/vb2themax/Tip/18516
...
Рейтинг: 0 / 0
04.09.2014, 11:06
    #38737220
Run-time error 438 - в чем причина?
VladConn,

и как эта заметка может повлиять на необходимость передачи объектной переменной по значению или ссылке? Франческо Балена просто предупредил об очередных граблях, ждущих не читавшего документацию новичка.

ByVal - для in-параметров, ByRef - для out и in/out.
ByRef для in-параметра как раз дезориентирует. Это о предпочтениях, если что.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Run-time error 438 - в чем причина? / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]