Форум: "Начинающим";
Текущий архив: 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