![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
String -> WideChar [D7, XP]
Б © (2010-04-04 01:22:00)Здрасти!
Как присвоить A S, без использования StrPCopy?
Т.е. Дельфийским приведением типов.
Var
S: string;
A: array[0..15] of WideChar;
Leonid Troyanovsky (2010-04-04 13:56:00) [1]
> Харакири (04.04.10 13:35) [21]
> С какой целью вообще это присвоение выполняется?
Видимо, заполняется The LOGFONT structure.
--
Regards, LVT.
Харакири (2010-04-04 13:35:00) [2]С какой целью вообще это присвоение выполняется? Задача какая?
Anatoly Podgoretsky (2010-04-04 13:27:00) [3]S := PChar(A)
Обычная стандартная и любимая - buffer overflow - unmanaged тип
Leonid Troyanovsky (2010-04-04 12:47:00) [4]
> Palladin © (04.04.10 12:00) [18]
> И где углядел ты здесь опасность, кстати говоря?
Надо длину контролировать:
if (Length(Name) < LF_FACESIZE) then
--
Regards, LVT.
Palladin (2010-04-04 12:00:00) [5]
> Anatoly Podgoretsky © (04.04.10 11:32) [17]
Ну присвой строковую переменную массиву. А мы все посмотрим как долго ты будешь пытаться откомпилировать это присвоение. И где углядел ты здесь опасность, кстати говоря?
Anatoly Podgoretsky (2010-04-04 11:32:00) [6]Дельфи поддерживает прямое присваиваение, нет нужды использовать такие опасные операции.
Б (2010-04-04 10:09:00) [7]О! Благодарю. ;)
Ну теперь я всё понял. Спасибо.
Palladin (2010-04-04 09:59:00) [8]Надо передавать реальные данные
Move(Name[1], lfFaceName, Length(Name));
Б (2010-04-04 09:57:00) [9]> Palladin © (04.04.10 09:31) [13]
Тимур, ны ары. :)
> и не говори что ты не знал что при Name: String, Name будет
> указателем на строку, а не самой строкой.
Если б я знал, то давно сидел в "Прочее". ;)
И что передавать 4, как размер Pointer?
Palladin (2010-04-04 09:31:00) [10]
> Б (04.04.10 09:14) [12]
Я тебе ЕЩЕ РАЗ ГОВОРЮ. Name - строка содержащая некое количество символов и мувить из нее 32 символа лишь потому что
Const
LF_FACESIZE = 32;
lfFaceName: array[0..LF_FACESIZE - 1] of AnsiChar;
это бред сивой кобылы.
Во вторых и не менее главных. Move принимает два параметра, откуда и куда. В "Откуда" ты указал идентификатор Name, и таким образом запихнул в lfFaceName ЗНАЧЕНИЕидентификатора Name, то есть значение указателя. Да еще и 28 байтов лежащих после него. Твой ник мне знаком, ты тут не первый день, и не говори что ты не знал что при Name: String, Name будет указателем на строку, а не самой строкой.
Б (2010-04-04 09:14:00) [11]
> Palladin © (04.04.10 09:11) [11]
Потому что:
Const
LF_FACESIZE = 32;
lfFaceName: array[0..LF_FACESIZE - 1] of AnsiChar;
Даже если заменить на Length(Name), результат тот же.
Palladin (2010-04-04 09:11:00) [12]
> Move(Name, lfFaceName, 32);
Почему 32? Почему не Length(Name)? Ты на 100% уверен что длинны Name - 32 символа? Если меньше, то в lfFaceName, мувнется весь мусор который лежит за пределами Name.
Б (2010-04-04 09:01:00) [13]
> Германн © (04.04.10 03:15) [9]
Если воспользоваться Move вместо StrPCopy, то
шрифт создаётся не корректно.
Германн (2010-04-04 03:15:00) [14]
> Б (04.04.10 02:50) [8]
>
>
> > Германн © (04.04.10 02:38) [7]
>
>
> Ладно.
> Как всё это сделать без StrPCopy?
>
А что всё? Вопрос то где?
Если в теме не фигурирует Wide, то какие проблемы?
Б (2010-04-04 02:50:00) [15]
> Германн © (04.04.10 02:38) [7]
Ладно.
Как всё это сделать без StrPCopy?
Германн (2010-04-04 02:38:00) [16]
> Б (04.04.10 02:29) [6]
>
>
> > Германн © (04.04.10 02:27) [5]
>
>
> Хм. Это я и спрашиваю.
>
Что это?
Разницу между Move и StrPCopy?
Тогда тебе лучше переформулировать сабж
Б (2010-04-04 02:29:00) [17]
> Германн © (04.04.10 02:27) [5]
Хм. Это я и спрашиваю.
Германн (2010-04-04 02:27:00) [18]
> Б (04.04.10 02:11) [4]
>
>
> > DVM © (04.04.10 02:04) [3]
>
>
> Чёта нет.
>
>
> Var
> FontI: TLogFont;
> begin
> ZeroMemory(@FontI, SizeOf(FontI));
> With FontI do
> begin
> . . . . .
>
> Move(Name, lfFaceName, 32);
> // StrPCopy(lfFaceName, Name);
> end;
И где тут "Дельфийским приведением типов"?
Б (2010-04-04 02:11:00) [19]
> DVM © (04.04.10 02:04) [3]
Чёта нет.
Var
FontI: TLogFont;
begin
ZeroMemory(@FontI, SizeOf(FontI));
With FontI do
begin
. . . . .
Move(Name, lfFaceName, 32);
// StrPCopy(lfFaceName, Name);
end;
DVM (2010-04-04 02:04:00) [20]
> Б (04.04.10 01:22)
А MOVE() не спасет отца русской демократии?