В чем правда, Брат?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
IvanTheTerrible
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 94
Зарегистрирован: 20.07.2005 (Ср) 11:47
Откуда: Moscow

В чем правда, Брат?

Сообщение IvanTheTerrible » 08.02.2008 (Пт) 11:29

Есть некоторое (мое) приложение, которое прекрасно работает при запуске из под среды разработки VB (пардон за многословность, забыл соответствующий термин).

Однако, как только я создаю exe-шник и запускаю его, начинаются падения.

Поскольку с подобным стакивался уже ни один раз (и не только на примере своего кода), хотелось бы понять принцип.

Почему одна и та же строка кода в одном случае работает, а в другом нет? Мой вариант ответа - это ошибка VB-компитятора. Я прав?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 08.02.2008 (Пт) 11:39

Мой вариант ответа - это ошибка VB-компитятора. Я прав?


И в 1001 раз повторимся - это ошибка программиста

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 08.02.2008 (Пт) 11:56

Смотря что за строка кода. У меня например подобное было когда я пытался обратиться в участку, лежащему вне памяти выделенной под массив. То есть создавался массив, потом из него по определенному смещению с помощью CopyMemory какой-то участок копировался в подготовленную структуру. Дык вот если это смещение было близко к последнему элементу массива, а размер структуры превышал оставшийся до конца участок массива, как раз и вылетала ошибка. Причем в IDE все нормально работало... Так что выкладывай код, посмотрим, что там за ошибка. Да и вообще правильно jangle сказал - это скорее всего ошибка программиста...
Подпись проходит рефакторинг

IvanTheTerrible
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 94
Зарегистрирован: 20.07.2005 (Ср) 11:47
Откуда: Moscow

Сообщение IvanTheTerrible » 08.02.2008 (Пт) 12:12

Падение наступает на этой строке. Параметры проверял, все ОК.

Код: Выделить всё
WriteProcessMemory hProcess, ByVal pMem, ByVal tvi, Len(tvi), w


Причем, та же строка в другом приложении работает без падения.

А вот, собственно, функция:
Код: Выделить всё
Private Function GetName(ByRef hTreeView As Long, ByRef hItem As Long) As String
    With tvi
        .hItem = hItem
        .mask = TVIF_TEXT
        .cchTextMax = 256
        .pszText = pMem + Len(tvi)
    End With
   
    WriteProcessMemory hProcess, ByVal pMem, ByVal tvi, Len(tvi), w
    SendMessageTV hTreeView, TVM_GETITEM, 0, ByVal pMem
    Buffer = Space$(256)
    ReadProcessMemory hProcess, ByVal (pMem + Len(tvi)), ByVal Buffer, 256, w
    GetName = Left$(Buffer, InStr(1, Buffer, Chr$(0)) - 1)
End Function


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 95

    TopList