WritePrivateProfileString - где обещанное удаление параметра

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

WritePrivateProfileString - где обещанное удаление параметра

Сообщение Eugenio » 15.10.2005 (Сб) 11:56

Доброго времени суток.
Требуется создать/отредактировать ini-файл. точнее, файл с такой же структурой. Обещано, что при передаче 0 в параметре lpString параметр будет из файла удален. А этого не происходит.
MSDN писал(а):BOOL WritePrivateProfileString(
LPCTSTR lpAppName, // section name
LPCTSTR lpKeyName, // key name
LPCTSTR lpString, // string to add
LPCTSTR lpFileName // initialization file
);
Parameters
.....
lpString
[in] Pointer to a null-terminated string to be written to the file. If this parameter is NULL, the key pointed to by the lpKeyName parameter is deleted.

Вот объявление:
Код: Выделить всё
Public Declare Function WritePrivateProfileString _
  Lib "kernel32" Alias "WritePrivateProfileStringA" _
  (ByVal lpAppName As String, _
  ByVal lpKeyName As Any, lpString As Any, _
  ByVal lpFileName As String) As Long

Вот вызов:
Код: Выделить всё
If Len(StrParamData) = 0 Then
    lngResult = WritePrivateProfileString(SECTION_NAME, StrParamName,  ByVal 0&, ConfigFileName)

Что тут не так? Можно, конечно, юзать WritePrivateProfileSection - эта работает железно. Но тут не удобно её юзать! Что имели в виду MS?
Есть ли у меня вопрос? У меня всегда есть вопрос

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 15.10.2005 (Сб) 12:03

Код: Выделить всё
If Len(StrParamData) = 0 Then
    lngResult = WritePrivateProfileString(SECTION_NAME, StrParamName,  ByVal 0, ConfigFileName)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.10.2005 (Сб) 12:17

Amed писал(а):
Код: Выделить всё
If Len(StrParamData) = 0 Then
    lngResult = WritePrivateProfileString(SECTION_NAME, StrParamName,  ByVal 0, ConfigFileName)

И в чём разница с оригиналом?

А я бы написал
Код: Выделить всё
Public Declare Function WritePrivateProfileString _
  Lib "kernel32" Alias "WritePrivateProfileStringA" _
  (ByVal lpAppName As String, _
  ByVal lpKeyName As Any, ByVal lpString As String, _
  ByVal lpFileName As String) As Long

If Len(StrParamData) = 0 Then
    lngResult = WritePrivateProfileString(SECTION_NAME, StrParamName,  vbNullString, ConfigFileName)
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 15.10.2005 (Сб) 12:28

Разница в том, что оригинал не работает.

В чем выгода твоего способа?
Ага, уже вижу LPCTSTR. :)

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 15.10.2005 (Сб) 12:52

To tyomitch:
блин, а и действительно!
А прикол в том, что у меня тоже всё работало, но я смотрел результаты не в том файле :? :D Прошу прощения..
Но рекомендованный способ мне больше нравится, впредь лучше так писать и буду - так можно обойтись без условий на длину строки и проч.
Есть ли у меня вопрос? У меня всегда есть вопрос


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 124

    TopList