Как сделать калькулятор в Delphi?

Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.

Как Delphi реализует многоплатформенную разработку?

Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...

Как вызывать функцию 16-битной DLL из 32-битного приложения

Советы » DLL » Как вызывать функцию 16-битной DLL из 32-битного приложения

Надо использовать Thunks.

Кусок работающего только под Windows 95 кода

const

Gfsr_SystemResources = 0; Gfsr_GdiResources = 1; Gfsr_UserResources = 2; var

hInst16: THandle; GFSR: Pointer; { Undocumented Kernel32 calls. } function

LoadLibrary16(LibraryName: PChar): THandle; stdcall

; external

kernel32 index 35; procedure

FreeLibrary16(HInstance: THandle); stdcall

; external

kernel32 index 36; function

GetProcAddress16(Hinstance: THandle; ProcName: PChar): Pointer; stdcall

; external

kernel32 index 37; procedure

QT_Thunk; cdecl

; external

kernel32 name 'QT_Thunk'; { QT_Thunk needs a stack frame. } {$STACKFRAMES On} { Thunking call to 16-bit USER.EXE. The ThunkTrash argument allocates space on the stack for QT_Thunk. } function

NewGetFreeSystemResources(SysResource: Word): Word; var

ThunkTrash: array

[0..$20] of

Word; begin

{ Prevent the optimizer from getting rid of ThunkTrash. } ThunkTrash[0] := hInst16; hInst16 := LoadLibrary16('user.exe'); if

hInst16 < 32 then

raise

Exception.Create('Can''t load USER.EXE!'); { Decrement the usage count. This doesn't really free the library, since USER.EXE is always loaded. } FreeLibrary16(hInst16); { Get the function pointer for the 16-bit function in USER.EXE. } GFSR := GetProcAddress16(hInst16, 'GetFreeSystemResources'); if

GFSR = nil

then

raise

Exception.Create('Can''t get address of GetFreeSystemResources!'); { Thunk down to USER.EXE. } asm

push SysResource { push arguments } mov edx, GFSR { load 16-bit procedure pointer } call QT_Thunk { call thunk } mov Result, ax { save the result } end

; end

;

Другое по теме:

Категории

Статьи

Советы

Copyright © 2024 - All Rights Reserved - www.delphirus.com