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

Вниз

Перевод типов на API   Найти похожие ветки 

 
Dmitry_177   (2006-11-02 14:14) [0]

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


 
RWolf ©   (2006-11-02 14:17) [1]

написать свою - дело пары минут.


 
Сергей М. ©   (2006-11-02 14:17) [2]


> Dmitry_177   (02.11.06 14:14)


> перевести тип


Галиматья.


 
Anatoly Podgoretsky ©   (2006-11-02 14:17) [3]

PChar(Integer) но я бы не рискнул так делать, и тем более String(Integer)


 
Dmitry_177   (2006-11-02 14:20) [4]

RWolf, я бы написал, только в какую сторону копать?

Anatoly Podgoretsky, я об этом думал, а почему этот способ не очень?


 
Gero ©   (2006-11-02 14:23) [5]

Str, Val


 
Gero ©   (2006-11-02 14:24) [6]

> [4] Dmitry_177   (02.11.06 14:20)
> Anatoly Podgoretsky, я об этом думал, а почему этот способ
> не очень?

Попробуй, узнашь, почему «не очень».


 
Anatoly Podgoretsky ©   (2006-11-02 14:29) [7]


> Anatoly Podgoretsky, я об этом думал, а почему этот способ
> не очень?

Потому что для Integer/PChar это нормальное явление, особенно для API (именно так передавались PChar строки/целые в Win3.11, что передалось определялось по смещению), это простые типы, то для строкие нет, это сложная, динамическая структура.


 
sniknik ©   (2006-11-02 14:32) [8]

Anatoly Podgoretsky ©   (02.11.06 14:17) [3]
ну это же не перевод, а приведение типа, выдача одного за другое. не совсем то о чем вопрос.

Dmitry_177   (02.11.06 14:14)
и кстати, типа String  на API нету, это уж скорее класс (как в C bstr, только посложнее) чем тип.


 
Dmitry_177   (2006-11-02 14:33) [9]

Label1.Caption := PChar(10020);

Попробовал, компилируется, но при переводе вылетает ошибка AV...


 
Anatoly Podgoretsky ©   (2006-11-02 14:36) [10]

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

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


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

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


 
sniknik ©   (2006-11-02 14:37) [12]

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


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

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


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

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


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


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


Пример:

Chislo: Integer = 1234;

StrokovoyePredstavlenieChicla: String;

...

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

?


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

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


 
DevilDevil ©   (2006-11-02 15:06) [17]

Непонятно, честно говоря, что нужно автору топика. Тем не менее:
{------------------------------------------------------------------}
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;
{------------------------------------------------------------------}


 
sniknik ©   (2006-11-02 15:54) [18]

Сергей М. ©   (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;


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

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


 
DevilDevil ©   (2006-11-02 16:25) [20]

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


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


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

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

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


 
sniknik ©   (2006-11-04 15:10) [22]

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

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

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


 
Anatoly Podgoretsky ©   (2006-11-04 18:07) [23]


> Caption := PChar(i);

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

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



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

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


 
Chose ©   (2006-11-05 01:29) [24]

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


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


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

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


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


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

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


 
Chose ©   (2006-11-05 10:15) [27]

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


 
Anatoly Podgoretsky ©   (2006-11-05 11:42) [28]


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

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


 
sniknik ©   (2006-11-05 12:25) [29]

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

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

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



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

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

Наверх




Память: 0.54 MB
Время: 0.057 c
3-1158396759
urel
2006-09-16 12:52
2006.11.19
Связи в БД


15-1162303585
Crazybeaver
2006-10-31 17:06
2006.11.19
Чудеса на виражах. Каким образом выполнена эта технология?


15-1162296572
Skier
2006-10-31 15:09
2006.11.19
Билеты в театр...


6-1151785308
ZLOFENIX
2006-07-02 00:21
2006.11.19
использование сокс


2-1162238869
Evo
2006-10-30 23:07
2006.11.19
ошибка блин