Страница: 1 |
Страница: 1 |
Вопрос: Проблема с Чтением и Записью INI
Добавлено: 27.09.10 11:40
Автор вопроса: Mc.WOLF
'Модуль класа
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private 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
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
Private Const BufferSize As Long = 4096
Private strIniFile As String
Public Property Get File() As String
File = strIniFile
End Property
Public Property Let File(Value As String)
strIniFile = Value
End Property
Public Function GetValue(strSection As String, strKey As String) As Variant
Dim strBuffer As String
Dim lLength As Long
strBuffer = Space(BufferSize)
lLength = GetPrivateProfileString(strSection, strKey, vbNullString, strBuffer, BufferSize, strIniFile)
GetValue = Left(strBuffer, lLength)
End Function
Public Sub WriteValue(strSection As String, strKey As String, vntValue As Variant)
WritePrivateProfileString strSection, strKey, CStr(vntValue), strIniFile
End Sub
Public Function GetSection(strSection As String) As Variant
Dim strBuffer As String
Dim lLength As Long
strBuffer = Space(BufferSize)
lLength = GetPrivateProfileSection(strSection, strBuffer, BufferSize, strIniFile)
GetSection = Split(Left(strBuffer, lLength), vbNullChar)
End Function
Public Function GetSectionKeys(strSection As String) As Variant
Dim strBuffer As String
Dim lLength As Long
strBuffer = Space(BufferSize)
lLength = GetPrivateProfileString(strSection, vbNullString, vbNullString, strBuffer, BufferSize, strIniFile)
GetSectionKeys = Split(Left(strBuffer, lLength), vbNullChar)
End Function
'Форма
Dim Ini As clsIniFile
Set Ini = New clsIniFile
On Error GoTo Error
With Ini
.File = App.Path & "/Settings.ini"
txtID.Text = .GetValue("general", "DefaultID")
End With
Set Ini = Nothing
Error:
Пишет "Compile error: Can't find project or library"
И выделяет "Space" из модуля класса что за нафиг?
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #1
Добавлено: 27.09.10 13:21
Компилятор противится, все верно. Он не хочет юзать INI-файлы в век XML.
Попробуй VBA.Strings.Space
Номер ответа: 2
Автор ответа:
Mc.WOLF
Вопросов: 26
Ответов: 84
Профиль | | #2
Добавлено: 27.09.10 13:56
В смысле? Я не понимаю о чём идёт речь если не трудно Вам объяснить мне подробно что сделать
Номер ответа: 3
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #3
Добавлено: 27.09.10 13:59
Замени везде Space на VBA.Strings.Space
Номер ответа: 4
Автор ответа:
Mc.WOLF
Вопросов: 26
Ответов: 84
Профиль | | #4
Добавлено: 27.09.10 14:07
ОГРОМНОЕ СПАСИБО!!!
Номер ответа: 5
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #5
Добавлено: 27.09.10 16:23
Executioner можешь описать преимущества xml вкратце? Так же медленно, при этом сложнее. Возможно я недопонял чего-то
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 27.09.10 16:25
Потому что XML это труъ
Номер ответа: 7
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #7
Добавлено: 27.09.10 17:47
В дотнете, насколько я помню, можно вообще экземпляр класса сохранить как XML.
XML гораздо более гибок, нежели INI. Вот как бы ты сохранял многоуровневое дерево параметров в INI? Или как быстро осуществить поиск нужного элемента по определенным параметрам в INI?
С XML все проще. Тут есть XQuery и XPath. Библиотеки обработки XML не так уж медленны. Да, он занимает больше места, да и вообще может показаться монструозным в сравнении с INI или каким-то другим форматом хранения текстовых данных в открытом виде, но это лишь на первый взгляд. Мне тоже так казалось, пока я не ударился в веб-кодинг с ajax и асинхронное программирование c Nodejs. Потому что XML это труъ. (с) Artyom
Номер ответа: 8
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #8
Добавлено: 28.09.10 03:51
В .NET есть встроенный механизм работы с настройками, который вообще не требует написания кода, основаный на XML. Впрочем остальное тоже верно.
Номер ответа: 9
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #9
Добавлено: 28.09.10 10:45
Еще в .NET есть XLinq
Номер ответа: 10
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #10
Добавлено: 29.09.10 00:15
Ах да, я совершенно забыл.