Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Embarcadero RAD Studio

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
unit System;
 
interface
 
const
  S_OK = 0;
  S_FALSE = $00000001;
 
type
  THandle = LongWord;
  HRESULT = type Longint;
  PByte   = ^Byte;
  HINST   = THandle;
  HMODULE = HINST;
 
  TGUID = record
   D1: Cardinal;
   D2: Word;
   D3: Word;
   D4: array [0..7] of Byte;
  end;
 
  IInterface = interface
    ['{00000000-0000-0000-C000-000000000046}']
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
  end;
 
  IUnknown = IInterface;
 
var ExitCode: Integer = 0;
 
procedure _Halt0;
procedure _HandleFinally;
function _IntfClear(var Dest: IInterface): Pointer;
procedure _FinalizeArray(p: Pointer; typeInfo: Pointer; elemCount: Cardinal);
 
implementation
 
const
  tkLString   = 10;
  tkWString   = 11;
  tkVariant   = 12;
  tkArray     = 13;
  tkRecord    = 14;
  tkInterface = 15;
  tkDynArray  = 17;
 
procedure ExitProcess(ExitCode: Integer); stdcall; external 'kernel32.dll' name 'ExitProcess';
 
procedure _Halt0;
begin
  ExitProcess(ExitCode);
end;
 
procedure _HandleFinally;
asm
end;
 
function _IntfClear(var Dest: IInterface): Pointer;
asm
        MOV     EDX,[EAX]
        TEST    EDX,EDX
        JE      @@1
        MOV     DWORD PTR [EAX],0
        PUSH    EAX
        PUSH    EDX
        MOV     EAX,[EDX]
        CALL    DWORD PTR [EAX] + VMTOFFSET IInterface._Release
        POP     EAX
@@1:
end;
 
procedure _FinalizeArray(p: Pointer; typeInfo: Pointer; elemCount: Cardinal);
asm
        CMP     ECX,0
        JE      @@zerolength
        PUSH    EAX
        PUSH    EBX
        PUSH    ESI
        PUSH    EDI
        MOV     EBX,EAX
        MOV     ESI,EDX
        MOV     EDI,ECX
        XOR     EDX,EDX
        MOV     AL,[ESI]
        MOV     DL,[ESI+1]
        CMP     AL,tkInterface
        JE      @@Interface
        JMP     @@exit
@@Interface:
        MOV     EAX,EBX
        ADD     EBX,4
        CALL    _IntfClear
        DEC     EDI
        JG      @@Interface
@@exit:
        POP     EDI
        POP     ESI
        POP     EBX
        POP     EAX
@@zerolength:
end;
 
end.

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 16:23 06-02-2016 | Исправлено: AlexCoRu, 16:57 06-02-2016
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Embarcadero RAD Studio


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru