![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевод типов на API [D7, WinXP]
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 и один оператор сравнения.