Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

String -> WideChar [D7, XP]


Страницы:   1 2

Б ©   (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() не спасет отца русской демократии?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо