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

Вниз

String -> WideChar   Найти похожие ветки 

 
Б   (2010-04-04 01:22) [0]

Здрасти!

Как присвоить A S, без использования StrPCopy?
Т.е. Дельфийским приведением типов.


Var
 S: string;
 A: array[0..15] of WideChar;



 
Германн ©   (2010-04-04 01:52) [1]

А разве StrPCopy в Д7 умеет такое?


 
Б   (2010-04-04 02:00) [2]

Поправочка: не WideChar, а AnsiChar.


 
DVM ©   (2010-04-04 02:04) [3]


> Б   (04.04.10 01:22) 

А MOVE() не спасет отца русской демократии?


 
Б   (2010-04-04 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:27) [5]


> Б   (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:29) [6]


> Германн ©   (04.04.10 02:27) [5]


Хм. Это я и спрашиваю.


 
Германн ©   (2010-04-04 02:38) [7]


> Б   (04.04.10 02:29) [6]
>
>
> > Германн ©   (04.04.10 02:27) [5]
>
>
> Хм. Это я и спрашиваю.
>

Что это?
Разницу между Move и StrPCopy?
Тогда тебе лучше переформулировать сабж


 
Б   (2010-04-04 02:50) [8]


> Германн ©   (04.04.10 02:38) [7]


Ладно.
Как всё это сделать без StrPCopy?


 
Германн ©   (2010-04-04 03:15) [9]


> Б   (04.04.10 02:50) [8]
>
>
> > Германн ©   (04.04.10 02:38) [7]
>
>
> Ладно.
> Как всё это сделать без StrPCopy?
>

А что всё? Вопрос то где?
Если в теме не фигурирует Wide, то какие проблемы?


 
Б   (2010-04-04 09:01) [10]


> Германн ©   (04.04.10 03:15) [9]


Если воспользоваться Move вместо StrPCopy, то
шрифт создаётся не корректно.


 
Palladin ©   (2010-04-04 09:11) [11]


>   Move(Name, lfFaceName, 32);

Почему 32? Почему не Length(Name)? Ты на 100% уверен что длинны Name - 32 символа? Если меньше, то в lfFaceName, мувнется весь мусор который лежит за пределами Name.


 
Б   (2010-04-04 09:14) [12]


> 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:31) [13]


> Б   (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:57) [14]

> Palladin ©   (04.04.10 09:31) [13]

Тимур, ны ары. :)


> и не говори что ты не знал что при Name: String, Name будет
> указателем на строку, а не самой строкой.


Если б я знал, то давно сидел в "Прочее". ;)

И что передавать 4, как размер Pointer?


 
Palladin ©   (2010-04-04 09:59) [15]

Надо передавать реальные данные
Move(Name[1], lfFaceName, Length(Name));


 
Б   (2010-04-04 10:09) [16]

О! Благодарю. ;)
Ну теперь я всё понял. Спасибо.


 
Anatoly Podgoretsky ©   (2010-04-04 11:32) [17]

Дельфи поддерживает прямое присваиваение, нет нужды использовать такие опасные операции.


 
Palladin ©   (2010-04-04 12:00) [18]


> Anatoly Podgoretsky ©   (04.04.10 11:32) [17]

Ну присвой строковую переменную массиву. А мы все посмотрим как долго ты будешь пытаться откомпилировать это присвоение. И где углядел ты здесь опасность, кстати говоря?


 
Leonid Troyanovsky ©   (2010-04-04 12:47) [19]


> Palladin ©   (04.04.10 12:00) [18]

>  И где углядел ты здесь опасность, кстати говоря?

Надо длину контролировать:
if (Length(Name) < LF_FACESIZE) then

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2010-04-04 13:27) [20]

S := PChar(A)
Обычная стандартная и любимая - buffer overflow - unmanaged тип


 
Харакири   (2010-04-04 13:35) [21]

С какой целью вообще это присвоение выполняется? Задача какая?


 
Leonid Troyanovsky ©   (2010-04-04 13:56) [22]


> Харакири   (04.04.10 13:35) [21]

> С какой целью вообще это присвоение выполняется?

Видимо, заполняется The LOGFONT structure.

--
Regards, LVT.



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

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.094 c
11-1216809601
Dy1
2008-07-23 14:40
2010.08.27
утечки памяти. Помогите, пожалуйста


2-1271055485
JohnKorsh
2010-04-12 10:58
2010.08.27
Как программно закрыть информационное сообщение.


2-1273738553
timekiller
2010-05-13 12:15
2010.08.27
Общение между программами по локальной сети


15-1269859658
AlexDan
2010-03-29 14:47
2010.08.27
Volvo теперь китайский автомобиль..!


15-1267738204
Юрий
2010-03-05 00:30
2010.08.27
С днем рождения ! 5 марта 2010 пятница