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

Вниз

IntToStr без System.pas   Найти похожие ветки 

 
diimon   (2007-09-04 07:18) [0]

у меня проблема: хочу написать маленькое приложение(модули System.pas и SysInit.pas обрезаны)
мне необходимы функции IntToStr и StrToInt, но я не знаю как их теперь реализовать, думал выдернуть их из оригинального System.pas, но там одна функция тянет за собой другую... вообщем ничего у меня не выходит. Что делать??(Ассемблер я к сожалению почти не знаю :(  )


 
tmp   (2007-09-04 08:19) [1]

function IntToStr(N: Int64): string;
begin
 Str(N,Result);
end;

function StrToIntDef(const S: string; DefVal: Integer): Cardinal;
var
 N: Cardinal;
 Code: Integer;
begin
 Val(S,N,Code);
 if Code = 0 then
   Result := N
 else
   Result := DefVal;
end;


 
tmp   (2007-09-04 08:29) [2]

В StrToIntDef лишняя переменная, лучше так:

function StrToIntDef1(const S: string; DefVal: Integer): Cardinal;
var
 Code: Integer;
begin
 Val(S,Result,Code);
 if Code > 0 then Result := DefVal;
end;


 
Anatoly Podgoretsky ©   (2007-09-04 09:00) [3]

Если не использовать STR/VAL, то функции настолько тривиальны, что написание с нуля, занимает ничтожное время.


 
Anatoly Podgoretsky ©   (2007-09-04 09:01) [4]

Может тебе в KOL?


 
homm ©   (2007-09-04 09:38) [5]

> думал выдернуть их из оригинального System.pas

Опа. А что, они не в SysUtils.pas разве объявлены?


 
clickmaker ©   (2007-09-04 10:27) [6]

msvcrt.dll или ntdll.dll
atoi
_itoa


 
palva ©   (2007-09-04 11:00) [7]

> модули System.pas и SysInit.pas обрезаны
Можно их вообще стереть или забить мусором. На создание программ это не повлияет. Компилятор использует модули System.dcu и SysInit.dcu из папки LIB. Вот без них проблемно. Без System.dcu вообще невозможно получить программу, даже если вы не будете использовать IntToStr.


 
sniknik ©   (2007-09-04 11:18) [8]

palva ©   (04.09.07 11:00) [7]
не знаком с KOL? там есть замены которые можно скомпилить и использовать.
есть и описание как это сделать (не только для KOL/в нем, видел еще в статьях по минимизации получающегося екзешника)

вопрос судя по всему "того" плана, в смысле и минимизация и замены("обрезанные") в нем присутствуют... не факт что у автора все сделано верно, но "обрезка" возможна и судя по всему используется (надо верить людям. раз говорит обрезаны значит обрезаны.).


 
palva ©   (2007-09-04 11:25) [9]

не знаком с KOL?
Да, теперь я понял вопрос.


 
Anatoly Podgoretsky ©   (2007-09-04 12:03) [10]

> sniknik  (04.09.2007 11:18:08)  [8]

Для особо озабоченных, там есть генетически модифицированый System.pas


 
diimon   (2007-09-04 13:14) [11]


> tmp   (04.09.07 08:19) [1]
> function IntToStr(N: Int64): string;begin  Str(N,Result);
> end;


Компилятор ругается на эту строку "Str(N,Result);"

System unit out of date or corrupted: missing "@str0int64"


 
homm ©   (2007-09-04 13:17) [12]

Смотри в сторону [6].


 
diimon   (2007-09-04 13:23) [13]

а на ассемблере как написать функцию
IntToStr и обратно?? мож у кого есть какие нить наработки??


 
homm ©   (2007-09-04 13:26) [14]

> [13] diimon   (04.09.07 13:23)

См. в сторону KOL.


 
tmp   (2007-09-04 13:53) [15]


> diimon   (04.09.07 13:14) [11]
>
>
> > tmp   (04.09.07 08:19) [1]
> > function IntToStr(N: Int64): string;begin  Str(N,Result);
>
> > end;
>
>
> Компилятор ругается на эту строку "Str(N,Result);"
>
> System unit out of date or corrupted: missing "@str0int64"
>


У меня на D7, WInXp все работает


program Project1;

uses
 Windows;

function IntToStr(N: Int64): string;
begin
 Str(N,Result);
end;

begin
 MessageBox(0,PChar(IntToStr(High(Int64))),"Test",0);
end.


 
Dib@zol ©   (2007-09-04 14:00) [16]

> [15] tmp   (04.09.07 13:53)

А ты попробуй отчекрыжить sysInit.pas/dcu и удивись :)


 
sniknik ©   (2007-09-04 14:03) [17]

> У меня на D7, WInXp все работает
ну у тебя же не обрезанный system. нет уж... сначала ты должен выкинуть процедуру Str (вместе с остальным) а потом проверять.


 
homm ©   (2007-09-04 14:03) [18]

> У меня  D7, WInXp…
… и стойкое нежелание читать ветку?


 
tmp   (2007-09-04 14:49) [19]

Да, не заметил


 
clickmaker ©   (2007-09-04 14:57) [20]

function MyIntToStr(N: int64): string;
var M: integer;
begin
 Result := "";
 while N > 0 do begin
   M := N mod 10;
   N := N div 10;
   Result := Chr(M + 48) + Result;
 end;
end;

StrToInt - домашнее задание


 
diimon   (2007-09-04 15:17) [21]


> clickmaker ©   (04.09.07 14:57) [20]
> function MyIntToStr(N: int64): string;var M: integer;begin
>  Result := "";  while N > 0 do begin    M := N mod 10;  
>  N := N div 10;    Result := Chr(M + 48) + Result;  end;
> end;StrToInt - домашнее задание

Компилятор ругается...
System unit out of date or corrupted: missing "@LStrClr"
:(


 
Anatoly Podgoretsky ©   (2007-09-04 15:19) [22]

Упс, у тебя порушеная Дельфи


 
clickmaker ©   (2007-09-04 15:19) [23]


> [21] diimon   (04.09.07 15:17)

операция обрезания прошла неудачно. Пациент умер от болевого шока


 
sniknik ©   (2007-09-04 15:26) [24]

> Упс, у тебя порушеная Дельфи
не, это просто неправильно порезанный System, дельфи тут не причем. (получал что то подобное при компилировании примера из какой то статьи по "минимизированному exe")
восстанавливается возвращением сохранённых оригиналов.


 
Anatoly Podgoretsky ©   (2007-09-04 15:29) [25]

> sniknik  (04.09.2007 15:26:24)  [24]

Что по сути одно и тоже.


 
homm ©   (2007-09-04 15:44) [26]

Закалебал. Нафига ты удалил эти функции из системного модуля, елс иони тебе нужны? Давай еше спрости, как мне работать в виндовс, который я стер, или как кататься в автомобиле, который я продал. Востанови хотя-бы те функции, которые тебе нужны.


 
diimon   (2007-09-05 07:43) [27]

слыш, homm ©, если тебе нечего ответить по вопросу, нахера ты ваще чето пишешь?? Флейм тут тока разводишь.
Удалил потому что она тянет за собой другую функцию, та тянет третью и так далее до бесконечности. А мне требуется просто переписать ее заново, вот и все. Не знаешь как это сделать- не пиши вообще!!!


 
homm ©   (2007-09-05 08:00) [28]

Слышь, дятел, зачем ты ветку завел, если все равно не читаешь, что тебе пишут? Сто раз сказано, в KOL глянь. Дак чукча же не читатель, он пойдет еше фигни наспрашивает лучше, чем совету последовать.

function Int2Str( Value : Integer ) : String;
var Buf : array[ 0..15 ] of Char;
   Dst : PChar;
   Minus : Boolean;
   D: DWORD;
begin
 Dst := @Buf[ 15 ];
 Dst^ := #0;
 Minus := False;
 if Value < 0 then
 begin
   Value := -Value;
   Minus := True;
 end;
 D := Value;
 repeat
   Dec( Dst );
   Dst^ := Char( (D mod 10) + Byte( "0" ) );
   D := D div 10;
 until D = 0;
 if Minus then
 begin
   Dec( Dst );
   Dst^ := "-";
 end;
 Result := Dst;
end;

procedure Int2PChar( s: PChar; Value: Integer );
var Buf : array[ 0..15 ] of Char;
   Dst : PChar;
   Minus : Boolean;
   D: DWORD;
begin
 Dst := @Buf[ 15 ];
 Dst^ := #0;
 Minus := False;
 if Value < 0 then
 begin
   Value := -Value;
   Minus := True;
 end;
 D := Value;
 repeat
   Dec( Dst );
   Dst^ := Char( (D mod 10) + Byte( "0" ) );
   D := D div 10;
 until D = 0;
 if Minus then
 begin
   Dec( Dst );
   Dst^ := "-";
 end;
 StrCopy( s, Dst );
end;

function UInt2Str( Value: DWORD ): String;
var Buf : array[ 0..15 ] of Char;
   Dst : PChar;
   D: DWORD;
begin
 Dst := @Buf[ 15 ];
 Dst^ := #0;
 D := Value;
 repeat
   Dec( Dst );
   Dst^ := Char( (D mod 10) + Byte( "0" ) );
   D := D div 10;
 until D = 0;
 Result := Dst;
end;


 
homm ©   (2007-09-05 08:12) [29]

Вот тебе еще, послаще малек.

function Int2Str( Value : Integer ) : String;
asm
       XOR       ECX, ECX
       PUSH      ECX
       ADD       ESP, -0Ch

       PUSH      EBX
       LEA       EBX, [ESP + 15 + 4]
       PUSH      EDX
       CMP       EAX, ECX
       PUSHFD
       JGE       @@1
       NEG       EAX
@@1:
       MOV       CL, 10

@@2:
       DEC       EBX
       XOR       EDX, EDX
       DIV       ECX
       ADD       DL, 30h
       MOV       [EBX], DL
       TEST      EAX, EAX
       JNZ       @@2

       POPFD
       JGE       @@3

       DEC       EBX
       MOV       byte ptr [EBX], "-"
@@3:
       POP       EAX
       MOV       EDX, EBX
       CALL      System.@LStrFromPChar

       POP       EBX
       ADD       ESP, 10h
end;


И вот сюда загляни, там замны систепмных модулей вские фокусы не вытворяют.
http://kolnmck.ru/files1.shtml


 
diimon   (2007-09-05 08:21) [30]

содержимое sysinit.pas

unit SysInit;

interface
procedure _InitExe;
procedure _halt0;
procedure _InitLib(Context: PInitContext);

var
 ModuleIsLib: Boolean;        
 TlsIndex: Integer = -1;      
 TlsLast: Byte;

const
 PtrToNil: Pointer = nil;  

implementation

procedure _InitLib(Context: PInitContext);
asm
end;

procedure _InitExe;
asm
end;

procedure _halt0;
asm
end;

end.


содержимое system.pas

unit System;

interface

procedure _HandleFinally;

type
TGUID = record
 D1: Cardinal;
 D2: Word;
 D3: Word;
 D4: array [0..7] of Byte;
end;

PInitContext = ^TInitContext;
TInitContext = record
   OuterContext:   PInitContext;  
   ExcFrame:       Pointer;          
   InitTable:      pointer;    
   InitCount:      Integer;          
   Module:         pointer;      
   DLLSaveEBP:     Pointer;
   DLLSaveEBX:     Pointer;
   DLLSaveESI:     Pointer;  
   DLLSaveEDI:     Pointer;  
   ExitProcessTLS: procedure;    
   DLLInitState:   Byte;            
end;

implementation

procedure _HandleFinally;
asm
end;

end.


по поводу
> homm ©   (05.09.07 08:00) [28]


компилер выдает System unit out of date or corrupted: missing "@LStrFromPChar"


 
Сергей М. ©   (2007-09-05 08:39) [31]


> diimon   (05.09.07 08:21) [30]


Это ты сам придумал так кастрировать сист.юниты или кто-то тебе посоветовал ?)


 
diimon   (2007-09-05 08:48) [32]

прочитал в инете где то :))
Причем все работало... до тех пор, пока мне не понадобилось... IntToStr


 
homm ©   (2007-09-05 08:52) [33]

> компилер выдает System unit out of date or corrupted: missing
> "@LStrFromPChar"

Возвращай на место всю кипу функций для работы со String, либо попробуй Int2PChar.


 
Сергей М. ©   (2007-09-05 08:53) [34]


> прочитал в инете где то


.. и бездумно содрал)


> все работало


Что "все" ?


> пока мне не понадобилось... IntToStr


Ты не понимаешь, как компилятор работает с LargeString-типами.


 
homm ©   (2007-09-05 08:59) [35]

> Причем все работало...

Ты еше не пробовал, наверное в проект модулей добавить, кроме project.dpr.


 
sniknik ©   (2007-09-05 08:59) [36]

> Это ты сам придумал так кастрировать сист.юниты или кто-то тебе посоветовал ?)
http://www.xakep.ru/magazine/xa/080/112/1.asp

diimon   (05.09.07 08:21) [30]
ну так... тут же нет ничего вообще. насколько понимаю в нормальном борландовский менеджер памяти должен загружаться, или ты должен брать обработку на себя и т.д.

> до тех пор, пока мне не понадобилось... IntToStr
подозреваю что не только это, а вообще с работа со строками нарушилась. т.е. если бы это была функция IntToPChar то все было бы нормально. (насколько возможно в таких условиях)

p.s. сколько раз повторить про KOL?


 
diimon   (2007-09-05 09:14) [37]

Короче ладно, засуну нормальные модули System.pas и SysInit.pas и буду уже потихоньку от туда вырезать лишнее. Спасибо за помощь


 
Anatoly Podgoretsky ©   (2007-09-05 10:09) [38]

Наука в прок не пошла.

От модератора: не указывай кому можно писать в твою ветку, а кому нет, если желаешь подобное, то сделай свой форум и там рули.


 
homm ©   (2007-09-05 10:48) [39]

> Короче ладно, засуну нормальные модули System.pas и SysInit.pas
> и буду уже потихоньку от туда вырезать лишнее. Спасибо за
> помощь

Ты ходил по ссылке?
http://kolnmck.ru/files1.shtml

[4] [8] [14] [28] [29] [36]
Сколько еше раз сказать?


 
miek ©   (2007-09-05 18:06) [40]

есть strtoint в составе shlwapi.dll
смотри в мсдн заголовок и пользуйся
а inttostr и сам за минуту напишешь



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

Форум: "Начинающим";
Текущий архив: 2007.09.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.063 c
2-1188842426
Dmitriy_
2007-09-03 22:00
2007.09.30
Как узнать имена всех объектов на форме? Плиз! очень нужно!


10-1136883328
френк
2006-01-10 11:55
2007.09.30
делаю ActiveX Control...


15-1188909994
Denis_
2007-09-04 16:46
2007.09.30
Палец заменит кредитку?


15-1188811524
Alien1769
2007-09-03 13:25
2007.09.30
Демонстрация "правильной" работы в системе Клиент-Сервер


2-1189072125
delphiForever
2007-09-06 13:48
2007.09.30
можна ли рисовать на битмапе в TThread





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский