Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.26;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
2-1285839434
mefodiy
2010-09-30 13:37
2010.12.26
QuickReport с юникодом для Delphi 7


15-1284791536
faton
2010-09-18 10:32
2010.12.26
Чем закодировать исходный код, от редактирования


4-1242593590
olevacho_
2009-05-18 00:53
2010.12.26
Запуск от другого пользователя


2-1285681850
Роман
2010-09-28 17:50
2010.12.26
MouseMove


2-1286134005
v_a_belousov
2010-10-03 23:26
2010.12.26
Обращение к группе объектов