![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IntToStr без System.pas [D7, WinXP]
diimon © (2007-09-04 07:18:00)у меня проблема: хочу написать маленькое приложение(модули System.pas и SysInit.pas обрезаны)
мне необходимы функции IntToStr и StrToInt, но я не знаю как их теперь реализовать, думал выдернуть их из оригинального System.pas, но там одна функция тянет за собой другую... вообщем ничего у меня не выходит. Что делать??(Ассемблер я к сожалению почти не знаю :( )
Сергей М. (2007-09-05 08:39:00) [21]
> diimon (05.09.07 08:21) [30]
Это ты сам придумал так кастрировать сист.юниты или кто-то тебе посоветовал ?)
diimon (2007-09-05 08:21:00) [22]содержимое 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'
homm (2007-09-05 08:12:00) [23]Вот тебе еще, послаще малек.
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
homm (2007-09-05 08:00:00) [24]Слышь, дятел, зачем ты ветку завел, если все равно не читаешь, что тебе пишут? Сто раз сказано, в 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;
diimon (2007-09-05 07:43:00) [25]слыш, homm ©, если тебе нечего ответить по вопросу, нахера ты ваще чето пишешь?? Флейм тут тока разводишь.
Удалил потому что она тянет за собой другую функцию, та тянет третью и так далее до бесконечности. А мне требуется просто переписать ее заново, вот и все. Не знаешь как это сделать- не пиши вообще!!!
homm (2007-09-04 15:44:00) [26]Закалебал. Нафига ты удалил эти функции из системного модуля, елс иони тебе нужны? Давай еше спрости, как мне работать в виндовс, который я стер, или как кататься в автомобиле, который я продал. Востанови хотя-бы те функции, которые тебе нужны.
Anatoly Podgoretsky (2007-09-04 15:29:00) [27]> sniknik (04.09.2007 15:26:24) [24]
Что по сути одно и тоже.
sniknik (2007-09-04 15:26:00) [28]> Упс, у тебя порушеная Дельфи
не, это просто неправильно порезанный System, дельфи тут не причем. (получал что то подобное при компилировании примера из какой то статьи по "минимизированному exe")
восстанавливается возвращением сохранённых оригиналов.
clickmaker (2007-09-04 15:19:00) [29]
> [21] diimon (04.09.07 15:17)
операция обрезания прошла неудачно. Пациент умер от болевого шока
Anatoly Podgoretsky (2007-09-04 15:19:00) [30]Упс, у тебя порушеная Дельфи
diimon (2007-09-04 15:17:00) [31]
> 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'
:(
clickmaker (2007-09-04 14:57:00) [32]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 - домашнее задание
tmp (2007-09-04 14:49:00) [33]Да, не заметил
homm (2007-09-04 14:03:00) [34]> У меня D7, WInXp…
… и стойкое нежелание читать ветку?
sniknik (2007-09-04 14:03:00) [35]> У меня на D7, WInXp все работает
ну у тебя же не обрезанный system. нет уж... сначала ты должен выкинуть процедуру Str (вместе с остальным) а потом проверять.
Dib@zol (2007-09-04 14:00:00) [36]> [15] tmp (04.09.07 13:53)
А ты попробуй отчекрыжить sysInit.pas/dcu и удивись :)
tmp (2007-09-04 13:53:00) [37]
> 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.
homm (2007-09-04 13:26:00) [38]> [13] diimon (04.09.07 13:23)
См. в сторону KOL.
diimon (2007-09-04 13:23:00) [39]а на ассемблере как написать функцию
IntToStr и обратно?? мож у кого есть какие нить наработки??
homm (2007-09-04 13:17:00) [40]Смотри в сторону [6].