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

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

Перевод типов на API [D7, WinXP]


Страницы:   1 2

Dmitry_177 ©   (2006-11-02 14:14:00) 

Как можно на API перевести тип Integer в PChar или String и обратно? Т.е. не использовать функции IntToStr и StrToInt из модуля SysUtils. Можно конечно скопировать их от туда, но может есть еще какойнибудь способ получше?


sniknik   (2006-11-05 12:25:00) [1]

> элементарная лабораторная.
при которой кстати ещё более менее оправданно отсутствие базовых знаний, ну учится человек, просто взялся не с того конца.
но если он уже что-то там пишет... не дай бог по работе, а не просто так, попробовать.

в любом случае рано взялся, пусть либо лекции перечитает, либо найдёт книгу с основами языка, и читает выполняя задания в ней. что такое указатели разберётся.

> P.S. Я не автор этой ветки :)
а откуда тогда знаешь что он пишет? может графический редактор, а на WinApi т.к. решил сделать его поменьше размером, типа в инете выкладывать. чужое ТЗ потёмки... (тут в своём часто разобраться не получается, такой бред дают, а уж чужое не читая... ;о)))


Anatoly Podgoretsky   (2006-11-05 11:42:00) [2]


> Chose ©   (05.11.06 01:29) [24]

С чего ты это решил, тут элементарная лабораторная.


Chose   (2006-11-05 10:15:00) [3]

>Да и ещё. Очень смущает дата появления ника Chose !
Чем это тебе мой ник не понравился ?
P.S. Я не автор этой ветки :)


Германн   (2006-11-05 02:40:00) [4]


> Chose ©   (05.11.06 01:29) [24]
>
Да и ещё. Очень смущает дата появления ника Chose ©!

Может ты попробуешь "более грамотно" задать свой вопрос?


Германн   (2006-11-05 02:05:00) [5]


> Chose ©   (05.11.06 01:29) [24]
>
...
> Автор пишет DLL для внедрения ее через AppInit_DLLs,
> и ему нужно обойтись без SysUtils
>

Ну и? Предложи своё решение сабжа.
Мастера "созвучные" по "короткому" имени его не поняли. :-)
Таки тебе все карты в руки!


Chose   (2006-11-05 01:29:00) [6]

>[22] sniknik ©   (04.11.06 15:10)
>[23] Anatoly Podgoretsky ©   (04.11.06 18:07)
Автор пишет DLL для внедрения ее через AppInit_DLLs,
и ему нужно обойтись без SysUtils


Anatoly Podgoretsky   (2006-11-04 18:07:00) [7]


> Caption := PChar(i);

Чего ты это вдруг решил подобное делать, ерунда получится.

S := '1234';
Caption := PChar(S);



> тебе не API замахиваться, а сначала элементарных базовых
> знаний поднабраться бы...

И Дельфи тоже пока рано.


sniknik   (2006-11-04 15:10:00) [8]

> Что-то не переводится...
да нет же, переводится (вернее приводится) но не присваивается(!!! разница однако), а не присваивается потому что... [12], не буду повторяться. указатель и данные на которые он указывает это не одно и то же.

var
i: integer;
p: PChar;
begin
i := 1234;
p := PChar(i);
//////////////////
Caption := p; //ошибка (AV) будет здесь, если строку убрать то ее не будет.
end;

p.s. тебе не API замахиваться, а сначала элементарных базовых знаний поднабраться бы...


Dmitry_177   (2006-11-04 14:55:00) [9]


> Anatoly Podgoretsky ©   (02.11.06 14:37) [11]
> Integer смело можно перевести в PChar и обратно, одно число в 4 байта,
> второе указатель,  тоже в 4 байта.

Что-то не переводится...

var
 i: integer;
begin
 i := 1234;
 Caption := PChar(i);
end;


DevilDevil   (2006-11-02 16:25:00) [10]

А мне вот непонятно, чем string не устраивает.


Плохиш   (2006-11-02 15:56:00) [11]

Видно у аФФтара семестр начался не 1го сентября, а 1го ноября и сразу с лабораторной :-)


sniknik   (2006-11-02 15:54:00) [12]

Сергей М. ©   (02.11.06 15:01) [15]
DevilDevil ©   (02.11.06 15:06) [17]
строка как уже говорилось не совсем тип, и уж не API точно.

Dmitry_177   (02.11.06 14:50) [14]
> я имел ввиду как сказал Anatoly Podgoretsky,
function IntToPChar(Buf: PChar; int: integer): PChar;
var
 n: integer;
begin
 n:= length(Buf)-1;
 FillChar(Buf[0], n+1, ' ');

 while int > 0 do begin
   Buf[n]:= Chr(int mod 10 + 48);
   int:= int div 10;
   Dec(n);
   if n < 0 then break;
 end;
 result:= Buf;
end;

procedure TForm1.Button1Click(Sender: TObject);
var s: array[0..11] of char; // это чтоб не парится со всякими выделениями памяти,
begin                              //
 s:= '01234567890'#0;      //и тд. кто в конце концов на API хочет писать? разбирайся зачем.
 Label1.Caption:= IntToPChar(s, 4569891);
end;


DevilDevil   (2006-11-02 15:06:00) [13]

Непонятно, честно говоря, что нужно автору топика. Тем не менее:
{------------------------------------------------------------------}
function MyIntToStr(X : Int64) : string;
begin
  Str(X, Result);
end;
{------------------------------------------------------------------}
function MyFloatToStr(X : Extended) : string;
begin
  Str(X:0:2, Result);
end;
{------------------------------------------------------------------}
function MyStrToInt(const S : string; Def : integer = 0) : Integer;
var Code, I : integer;
begin
  {$R-}
  Val(S, I, Code);
  if Code <> 0 then Result := Def
  else Result := I;
  {$R+}
end;
{------------------------------------------------------------------}
function MyStrToFloat(const S : string; Def : Extended = 0) : Extended;
var Code : integer; F : Extended;
begin
 {$R-}
   Val(S, F, Code);
   if Code <> 0 then Result := Def
   else
   Result := F;
 {$R+}
end;
{------------------------------------------------------------------}


Сергей М.   (2006-11-02 15:01:00) [14]


> Dmitry_177   (02.11.06 14:43) [13]
>
> Подскажите, а как тогда число перевести в строковое представление
> и обратно?


Пример:

Chislo: Integer = 1234;

StrokovoyePredstavlenieChicla: String;

...

StrokovoyePredstavlenieChicla := IntToStr(Chislo); //нате вам  строковое представление числа, хранящегося в переменной Chislo, в десятичном виде.

?


Gloomer   (2006-11-02 15:01:00) [15]

>[13] Так чем же тебе не нравятся стандартные IntToStr и StrToInt???


Dmitry_177   (2006-11-02 14:50:00) [16]

я имел ввиду как сказал Anatoly Podgoretsky,
> тамэлементарный цикл и две операции / и MOD и один оператор
> сравнения.


Dmitry_177   (2006-11-02 14:43:00) [17]

Подскажите, а как тогда число перевести в строковое представление и обратно?


sniknik   (2006-11-02 14:37:00) [18]

> но при переводе вылетает ошибка AV...
правильно вылетает, ты из числа сделал указатель на zтерминированную строку, но этот указатель указывает в никуда/область для программы закрытую, а вовсе не на строку с нулем в конце.


Anatoly Podgoretsky   (2006-11-02 14:37:00) [19]

Так вопрос криво поставлен. Integer смело можно перевести в PChar и обратно, одно число в 4 байта, второе указатель, тоже в 4 байта. String хоть и указатель, но на сложную структуру, управляемую помимо программиста.


Anatoly Podgoretsky   (2006-11-02 14:36:00) [20]

> sniknik  (02.11.2006 14:32:08)  [8]

Попросил бы перевод в строкое представление, то и ответ бы был другой, там
элементарный цикл и две операции / и MOD и один оператор сравнения.


Страницы:   1 2

Наверх

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