вылетает vb

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

вылетает vb

Сообщение shady » 27.08.2006 (Вс) 17:16

Здравствуйте объявил АПИ
Код: Выделить всё
Public Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

пытаюсь прочитать из ini файла так:
Код: Выделить всё
strDataSource = GetPrivateProfileSection("SrvName", strDataSource, 100, App.Path & "\settings.ini")

и сразу вылетает. Причем еще недавно все прекрасно работало. Никто не сталкивался?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.08.2006 (Вс) 17:28

Ужас...

При всём остальном ужасе, который виден в коде - для начала скажи, тебе совсем-совсем не кажется ненормальным, что ты присваиваешь строке возвращённое значение лонговой функции?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 27.08.2006 (Вс) 17:33

Ещё странней то, что раньше всё работало!!!

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 27.08.2006 (Вс) 17:50

Присвоение значения убери + заполни переменную для результата любыми символами
Код: Выделить всё

strDataSource=String(100, Chr(32))

например.
Если всё делать своими ручками, они скоро отвалятся !

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 27.08.2006 (Вс) 18:34

Код: Выделить всё
Call GetPrivateProfileString("SrvName", strDataSource, 100, App.Path & "\settings.ini")
- было до того как начало вылетать.
API-Guide 3.7
The GetPrivateProfileSection function retrieves all the keys and values for the specified section of an initialization file.

разве не должна вернуть пару ключ/значение?

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 27.08.2006 (Вс) 18:44

Kovu
спасибо, действительно, в объявлении переменной не была указана длинна строки
Код: Выделить всё
Public strDataSource As String * 100

теперь не вылетает.
но все-таки не совсем понятно поведение самого VB при этом :( почему именно вылетает?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.08.2006 (Вс) 19:21

shady писал(а):разве не должна вернуть пару ключ/значение?

Сам процитировал "all the keys and values", и сам хочешь одну пару?

shady писал(а):но все-таки не совсем понятно поведение самого VB при этом :( почему именно вылетает?

А что ещё ему остаётся, когда буфер не выделен?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 27.08.2006 (Вс) 19:26

Сам процитировал "all the keys and values", и сам хочешь одну пару?

согласен, не сказал что в секции только 1 ключ=значение
А что ещё ему остаётся, когда буфер не выделен?

логично было бы предположить - сказать об этом

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.08.2006 (Вс) 19:27

Каким образом функция GetPrivateProfileString может узнать, что переданный указатель на буфер не содержит за собой достаточно места?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 27.08.2006 (Вс) 19:53

Функция-то не узнает, но VB дожен об этом позаботиться. О overflow сообщает, значит сравнивает, а раз сравнивает, значит и здесь мог-бы сравнить. Просто не все предусмотрели разработчики, что в общем-то и не удивительно. Все предусмотреть нельзя.
а что касается
но все-таки не совсем понятно поведение самого VB при этом почему именно вылетает?

был дан ответ, спасибо.
А что ещё ему остаётся, когда буфер не выделен?
.
Так что считаю, что не стоит дальше продолжать эту дискуссию.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.08.2006 (Вс) 19:58

shady, поверь мне, из твоих слов понятно, что ты совсем не понимаешь, как всё устроено, и почему всё было сделано именно так.
И разработчики как раз сделали максимум.
Поэтому просто поверь на слово - всё сделано так, что лучше уже некуда. Физически невозможно, понимаешь?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 27.08.2006 (Вс) 20:10

верю на слово


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

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

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

    TopList