Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Вниз

Перевод типов на 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.045 c
15-1162375283
Карелин Артем
2006-11-01 13:01
2006.11.19
Зарплаты/жилье в Подольске. Что почем?


4-1152080848
ADSVRDL
2006-07-05 10:27
2006.11.19
Помогите с s/n для железа


2-1162433136
viper03
2006-11-02 05:05
2006.11.19
помогите с sql


15-1162168950
RASkov
2006-10-30 03:42
2006.11.19
Как можно прочитать


2-1162308301
daser
2006-10-31 18:25
2006.11.19
Что неправильно в строке?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский