Debug.Print

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Debug.Print

Сообщение Jack Ferre » 26.07.2014 (Сб) 7:03

Debug.Print компилируется в исполняемый файл.

220px-Paris_Tuileries_Garden_Facepalm_statue.jpg
220px-Paris_Tuileries_Garden_Facepalm_statue.jpg (9.38 Кб) Просмотров: 2160

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Debug.Print

Сообщение The trick » 26.07.2014 (Сб) 9:53

Нет.
UA6527P

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Debug.Print

Сообщение Jack Ferre » 26.07.2014 (Сб) 10:16

Код: Выделить всё
Debug.Print "thread id: " & GetCurrentThreadId

GetCurrentThreadId выполняется в скомпилированном экзешнике. Дамаю и сам Debug.Print тоже пытается куда-нибудь вывести текст. Иначе нафига вообще выполнять код в этой строке.

Проблема в том, что у меня весь код напичкан Debug.Print-ами. Ладно если просто переменную вывожу, а то ж функции всякие вызываю.

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Debug.Print

Сообщение Jack Ferre » 26.07.2014 (Сб) 10:19

А вот и доказательства:
Код: Выделить всё
Private n As Long

Private Function mf() As Long
    n = 777
End Function

Private Sub Form_Load()
    Debug.Print mf
    Caption = n
End Sub

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Debug.Print

Сообщение The trick » 26.07.2014 (Сб) 11:49

viewtopic.php?f=68&t=42654
Естественно, ты изменяешь глобальные данные.
Выполняется не Debug.Print, а так, как-будто его там нет, просто вызов функции.
Откуда VB6 знает что внутри GetCurrentThreadId? Может там идет инициализация какой нибудь библиотеки?
UA6527P

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Debug.Print

Сообщение Jack Ferre » 26.07.2014 (Сб) 12:10

Я относился к строке Debug.Print как к коментарию, который не попадет в экзешник. И при отладке потоков не обращал на неё внимание. А тем временем тот же GetCurrentThreadId вполне удачно рушит программу.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Debug.Print

Сообщение The trick » 26.07.2014 (Сб) 12:24

И при отладке потоков не обращал на неё внимание. А тем временем тот же GetCurrentThreadId вполне удачно рушит программу.

Нужно либо объявлять ее в TLB, либо инициализировать контекст.
Вручную инициализировать контекст вероятно кроме Хакера никто не умеет.
Можно инициализировать контекст вызовом VBDllGetClassObject, либо сразу вызвать метод InitDllAccess объекта rby_ThreadPool. Я пробовал так делать, контекст инициализируется, но затираются некоторые глобальные переменные, т.к. для StandartEXE выход из InitDllAccess - это выход из приложения. InitDllAccess в правильном варианте StandartEXE возвращает управление только после окончания приложения.
UA6527P

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Debug.Print

Сообщение Хакер » 27.07.2014 (Вс) 3:44

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 88

    TopList