RegSetValueEx - что-то не работает

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.01.2005 (Вт) 17:52

Вот ещё несколько цитат с гугла:
VB always uses BSTR, it simply passes an Ansi BSTR when you use the Declare interface. This looks just like an LPSTR, but in fact it is that and more: it's a real, true BSTR in Ansi format.


Passing a string ByVal to a Declared procedure passes a pointer to an Ansi BSTR (not ASCII -- big difference). BSTRs, Unicode or otherwise, are always terminated with a null character, so this looks like LPSTR or *char to the called procedure.


Nothing about BSTR requires that the string be Unicode (though that's a common misconception). When VB passes a string or string array through the Declare interface, it converts the Unicode BSTR to Ansi BSTR, and (in case any changes or additions were made) converts back from Ansi BSTR to Unicode BSTR on return. So any changes or creations you make must be in Ansi.


No, there's no conversion from BSTR to LPSTR, though there is an automatic conversion from Unicode BSTR to Ansi BSTR for Declared external procedures.
The reason why you can pass a BSTR where an LPSTR is needed lies in how a BSTR is constructed and stored. It is in fact just a pointer to a zero-terminated series of characters (LPSZ). What makes it a BSTR is that the byte length is stored in a dword at a -negative- offset to the string body. Routines that expect LPSTR don't know to look "backward" for this length prefix and so they never see it.


И на закуску - по-русски:
То есть BSTR, на самом деле, может быть по смыслу как юникодный, так и анси, только то, какой он, хранится в моей собственной голове.

Странно как-то получается, что 2 разных типа на самом деле описываются одним BSTR-ом.
Изображение

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

Сообщение tyomitch » 04.01.2005 (Вт) 17:56

GSerg писал(а):А ты как прокомментируешь мою цитату из MSDN, что это массив юникодовых чаров? :)

Ну, не договорились парни в Редмонте между собой... У oleauto team свой BSTR, а у vba team - свой :-)

GSerg писал(а):Можно, кстати, потестить эту функцию просто, и позырить, чё она там возвращает и как...

Можно, но нафига, когда всё и так понятно? ;-)

GSerg писал(а):Или, наверное, BSTR - это в иерархии типа как HANDLE, а ABSTR - это, к примеру, HBRUSH :)
Типа того... Кроме того, что ABSTR - "неофициальный" тип, т.е. он относится не к Винде, а узко к VB.
Изображение

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

Сообщение GSerg » 04.01.2005 (Вт) 17:56

Комп - вещь детерминированная :)

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

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

Сообщение tyomitch » 04.01.2005 (Вт) 18:08

Нет, не так!

Эрик Липперт, на статью которого я сослался на прошлой странице, однозначно утверждает, что в BSTR может лежать что угодно, любые двоичные данные, в т.ч. имеющие в длину нечётное количество байт (!)
Посему, постановить, что BSTR обычно Unicode, а в общем - хоть ANSI, хоть KOI-7, хоть в пятибитном коде Бодо ( http://en.wikipedia.org/wiki/Baudot ) :-)
Изображение

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

Сообщение GSerg » 05.01.2005 (Ср) 4:35

KOI-8 :razz:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение tyomitch » 06.01.2005 (Чт) 4:57

GSerg писал(а):KOI-8 :razz:
Это, типа, намёк, что KOI-7 нету? Ну тогда посмотри на http://www.google.com/search?hl=en&lr=&q=koi-7
Изображение

Пред.

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

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

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

    TopList  
cron