Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.12.26;
Скачать: [xml.tar.bz2];

Вниз

convert LSA_UNICODE_STRING to string   Найти похожие ветки 

 
istok   (2010-09-27 16:15) [0]

как сконвертить LSA_UNICODE_STRING в string?


 
Anatoly Podgoretsky ©   (2010-09-27 16:29) [1]

Где это объявлено и как это объявлено.


 
istok   (2010-09-27 16:37) [2]

 USHORT = word;
   
 _LSA_UNICODE_STRING = record
   Length: USHORT;
   MaximumLength: USHORT;
   Buffer: LPWSTR;
 end;
 LSA_UNICODE_STRING = _LSA_UNICODE_STRING;

 LPWSTR = PWideChar; (из Windows.pas)


т.е. я так понял, что Buffer указывает на 1ый символ и надо прочесть всю строку и сконвертить в string..


 
12 ©   (2010-09-27 16:37) [3]

У джедаев оформлено как

 TLSAUnicodeString = packed record
   Length : WORD;
   MaximumLength : WORD;
   Buffer : PWideChar
 end;


 
12 ©   (2010-09-27 16:39) [4]

function LSAUnicodeStringToStr (const lsaStr : TLSAUnicodeString) : string;
var
 len : Integer;
begin
 len := lsaStr.Length div sizeof (WideChar);
 SetLength (result, len);
 WideCharToMultiByte (CP_ACP, 0, lsaStr.Buffer, len,  PChar (result), len, Nil, Nil);
end;


 
istok   (2010-09-27 16:45) [5]

спасибо!


 
Anatoly Podgoretsky ©   (2010-09-27 16:54) [6]

Я думаю хватит WS := PWideChar(Buffer);


 
han_malign   (2010-09-27 17:54) [7]


> Я думаю хватит WS := PWideChar(Buffer);

- при наличии точной длины, существование терминирующего символа не гарантированно, особенно при (Length = MaximumLength)...

ws: WideString;
...
SetString(ws, lsaStr.Buffer, lsaStr.Length);


 
Anatoly Podgoretsky ©   (2010-09-27 19:25) [8]


> The WideString type represents a dynamically allocated string
> of 16-bit Unicode characters. In most respects it is similar
> to AnsiString. On Win32, WideString is compatible with the
> COM BSTR type.

Почему я должен не верить Борману?


 
6x8   (2010-09-28 04:59) [9]


> Почему я должен не верить Борману?

Потому что борман тут не при делах. Это виндовая структура и читать про неё надо в SDK/MSDN, а не где попало. А там четко сказано


> Length
> Specifies the length, in bytes, of the string pointed to
> by the Buffer member, not including the terminating NULL
> character, if any
.
> ...
> Buffer
> Pointer to a wide character string. Note that the strings
> returned by the various LSA functions might not be null-
> terminated.



 
Anatoly Podgoretsky ©   (2010-09-28 08:55) [10]

> 6x8  (28.09.2010 04:59:09)  [9]

А WideString это Дельфи структура и не тыкай в меня null- terminated это
твоя задача сделать это null- terminated до использования. PChar тоже might
not be null-terminated.  Но это же никому не мешает, все работают и не
грустят.


 
6x8   (2010-09-28 12:11) [11]


> А WideString это Дельфи структура и не тыкай в меня null-
>  terminated это
> твоя задача сделать это null- terminated до использования.
>  

Да мне по барабану чё ты там делать будешь, а придёт тебе эта структура из системной или стороннеё либы, которая действует сторго согласно доки и которой до фонаря и ты, и дельфя и WideString, и получишь по самые помидоры.

Сам делай как хочешь, но хоть другим не ври - конфа-то для начинающих, постыдись


 
Jumbo   (2010-09-28 13:09) [12]

>>Anatoly Podgoretsky ©   (27.09.10 16:54) [6] Я думаю хватит WS := PWideChar(Buffer);

>>Anatoly Podgoretsky ©   (28.09.10 08:55) [10] А WideString это Дельфи структура и не тыкай в меня null- terminated это твоя задача сделать это null- terminated до использования.

Как-то [6] и [10] конфликтуют между собой. Если "задача сделать это null- terminated до использования", то тогда не "я думаю хватит". Если "я думаю хватит", то тогда не надо "сделать это null- terminated до использования". Выбрать нужно одно из двух. Точнее, выбирать-то нечего, решение в [7].


 
Anatoly Podgoretsky ©   (2010-09-28 13:23) [13]

> 6x8  (28.09.2010 12:11:11)  [11]

Аминь


 
Anatoly Podgoretsky ©   (2010-09-28 13:28) [14]


> Точнее, выбирать-то нечего, решение в [7].

Точнее одно из решений, точно также будет работать и buffer[lsaStr.Length]
Для строк, которые не содержат null, и будет buffer полностью совстимый с WS.


 
Клеррио   (2010-09-28 15:42) [15]

Anatoly Podgoretsky ©   (28.09.10 13:28) [14] и будет buffer полностью совстимый с WS.

Не будет.


 
Anatoly Podgoretsky ©   (2010-09-28 15:43) [16]

> Клеррио  (28.09.2010 15:42:15)  [15]

Причины?


 
Anatoly Podgoretsky ©   (2010-09-28 16:57) [17]


> han_malign   (27.09.10 17:54) [7]

Я думаю что в его случае SetString не применим, хотя он не указал версии Дельфи.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.12.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
2-1286134005
v_a_belousov
2010-10-03 23:26
2010.12.26
Обращение к группе объектов


15-1284728859
12
2010-09-17 17:07
2010.12.26
Шахматы. А как бы Вы сыграли?


2-1285829767
TheEd
2010-09-30 10:56
2010.12.26
Как сменить курсор во время OnMouseDown


15-1284430430
AlexDn
2010-09-14 06:13
2010.12.26
PayPal


15-1284625750
SPeller
2010-09-16 12:29
2010.12.26
Кто разбирается в ОО проектировании? Совет бы мне...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский