powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Run-time error 438 - в чем причина?
8 сообщений из 8, страница 1 из 1
Run-time error 438 - в чем причина?
    #38735922
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Run-time error 438 - в чем причина?
    #38735979
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погуглил, походу это баг 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
Run-time error 438 - в чем причина?
    #38736026
Eolt,

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

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

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

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

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

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

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

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


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