Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Framework Pascal

Logo

Najčešće postavljana pitanja


  1. Mogu li komercijalne aplikacije da se razvijaju pomoću FrameworkPascal?
  2. Kako mogu da dobijem direktan pristup programskim podacima?
  3. Mogu li da obavljam aritmetičke operacije sa pokazivačima?
  4. Zašto ne mogu da postavim LFB video režim sa GRAPH jedinicom?
  5. Zašto ne mogu konfigurisati LFB SVGA video režime u RAW DOS, ako rade u Windows’ 95?
  6. Pokušavam da napravim TSR program sa FRAMEWORKPASCAL Pascal, ali ne radi. Zašto?
  7. Kako da napravim interrupt handlers sa FrameworkPascal?
  8. Ja koristim OVERLOAD referencu da bi definisao '*' operatora za fiksne tačke promenljive u jedinici, ali to nema nikakvog efekta. Zašto?
  9. Kako da izdvojim blokadu memorije u prvom megabajtu memorije?
  10. Kako kreirati i/ili koristiti DLL-ove u zaštićenim režimima MS-DOS aplikacije?
  11. Kako napisati windows GUI aplikacije sa FrameworkPascal kompajlerom?
  12. Pokušao sam da rekompajliram moje stare TP izvore sa FrameworkPascal kompajlerom, ali sam dobio nekoliko poruka o grešci. Da li nešto nije u redu tamo?
  13. Napravio sam Win32 GUI aplikaciju koja koristi Graph biblioteku. Zašto to ne funkcioniše?
  14. Kako da se otarasim PMODE/W logoa u mojim MS-DOS aplikacijama?
  15. Moram stvarno da izazovem realni režim prekida (npr. int 21h), i moram da podesim DS:DX prema segmentu: ofset pojedinih promenljivih podataka. Kako da to uradim?
  16. Zašto je "Single-Step" komanda u ugrađenom debageru toliko spora?
  17. Kada pokušam da pokrenem program koji pravim, FrameworkPascal Pascal me ne upozorava na moje "greške koda".
  18. Napisali ste da je FrameworkPascal kompajler opremljen sa debagerom na visokom nivou. Ja ne razumem šta "debager na visokom nivou" znači, Na primer, da li dozvoljava da podesite tačke prekida, izvedete step-through izvršavanje, pronađete run time greške, itd?
  19. Kako mogu da pronađem informacije o windows API i Pascal funkcijama?
  20. Kako mogu da izmenim i sastavim datoteke resursa (.res, .rc datoteke uključuju menije, ključeve akceleratora, dijaloge, ikone i bitmape i da li su povezani sa izvršnim programima)?

1. Može li aplikacija razvijena sa FrameworkPascal biti distribuirana ili prodata? Sa kojim verzijama TMT i FrameworkPascal?

Vlasnici neograničene TMT4, TMT5 i FrameworkPascal licence mogu distribuirati ili prodavati aplikacije kreirane od strane njih samih. Aplikacije kreirane sa obrazovnim i ograničenim ličnim verzijama ne mogu biti distribuirane ili prodate.

2. Kako mogu da dobijem direktan pristup programskim podacima?

FrameworkPascal koristi fiksni model memorije. To znači, da svi kodovi, statični i trenutni (izdvojeni sa GetMem procedure) procedurom) podaci su smešteni u istom segmentu. Tako možete dobiti pristup vašim podacima koristeći linearni ofset od početka memorijskog objekta. Primer ispod pokazuje vam, kako da dobijete direktan pristup bloku memorije koja je izdvojena GetMem postupkom.

var
  P: Pointer; Dummy: Byte;
  i: DWORD;
begin
  GetMem(P, 100000);
  for i := 0 to 99999 do
    Byte((P + i)^) := Random(256);
  for i := 0 to 99999 do
    Dummy := Byte((P + i)^);
end.

Also you can use the built-in assembler to get high speed direct access to memory.

Example:

asm
  mov edi, [P]     // P is a pointer to a data block in memory
  mov ecx, [SIZE] // SIZE is the size of the data block
  mov al,  0FFh   // Assign a value to fill
  rep stosb        // Fill the data block with the $FF value
end ;

3. Mogu li obavljati aritmetičke operacije sa pokazivačima?

Da, možeš. Možete koristiti Inc() i Dec() postupke. Takođe možete povećati ili smanjiti pokazivač koristeći "+" i "-" operatore.

Primer:

var
  ScrAddr: Pointer;
begin
  // ScrAddr points to the first byte of VGA memory
  // (higher left pixel)   
  ScrAddr := Pointer($A0000);
  // Now ScrAddr points to the last byte of VGA memory
  // (lower right pixel)   
  ScrAddr := ScrAddr + 63999;
end .

4. Zašto ne mogu da postavim LFB video režim sa GRAPH jedinicom?

Linear Flatframe Buffer (LFB) je podržan samo ako vaša grafička karta ima VESA VBE verziju 2.0 ili noviju. Stare grafičke kartice sa VESA VBE verzijama 1.2 ili nižim ne podržavaju LFB bez posebnih VESA VBE drajvera. Preporučujemo SciTech Display Doctor 5.3 ili noviji da biste pristupili LFB na starijim grafičkim karticama, koje ne podržavaju VESA VBE 2.0. SciTech Display Doctor je dostupan na adresi: http://www.scitechsoft.com

5. Zašto ne mogu konfigurisati LFB SVGA video režime u RAW DOS, ako rade u Windows’ 95?

U slučaju da kompajlirate vaš program sa PMODE-baziranim extender-om. Ovaj extender ne podržava 800h funkciju od DPMI domaćina pod RAW DOS, ali vaš program radi pod windows 95, jer koristi DPMI domaćina od windows 95. Preporučujemo da kompajlirate svoje programe sa novim PMODE/W, WDOSX i DOS/4GW baziranim extender-ima, koji podržavaju 800H funkciju od DPMI domaćina čak i pod RAW DOS.

6.Pokušavam da napravim TSR program sa FRAMEWORKPASCAL Pascal, ali ne radi. Zašto?

FrameworkPascal pravi MS-DOS 32-bitni zaštićeni programski režim i nije namenjen za pravljenje aplikacija realnog režima, kao što su TSR's.

7. Kako da napravim interrupt handlers-e sa FrameworkPascal-om?

Primer ispod pokazuje jednostavan način rada sa interrupt-handlers’.

program IntDemo;
{$ifndef __DOS__}
  Wrong compilation target
{$endif}
uses Dos, Crt;
var
  Int1CSave: FarPointer;
  Time: LongInt;
/////////////////////////////////////////////////////
procedure TimerHandler; interrupt;
var
  StoreX, StoreY: Word;
begin
  Inc(time);
  StoreX := WhereX;
  StoreY := WhereY;
  GotoXY(1, 1);
  Write(time);
  GotoXY(StoreX, StoreY);
end; {TimerHandler}
/////////////////////////////////////////////////////
begin
  ClrScr;
  Time := 0;
  GetIntVec($1C, Int1CSave);
  SetIntVec($1C, @TimerHandler);
  Writeln;
  Writeln('Type something and press "ENTER" to exit');
  Readln;
  SetIntVec($1C, Int1CSave);
end.

8.Napravio sam fiksnu tačku biblioteke za FrameworkPascal. Ja koristim OVERLOAD referencu da bi definisao '*' operatera za fiksne tačke promenljive u jedinici, ali to nema nikakvog efekta. Zašto? Deo moje jedinice je ispod:

{16.16 fixed-point math unit}
unit Fix1616;
 
interface
type Fixed16 = LongInt;
function FixMulFix(F1, F2: Fixed16): Fixed16;
 
implementation
  function FixMulFix(F1, F2: Fixed16): Fixed16;
  assembler;
  asm
    mov  eax,F1
    mov  edx,F2
    imul edx
    sal  eax,1
    adc  edx,0
    shrd eax,edx,16
  end;
  OVERLOAD * = FixMulFix;
end.

Trebalo bi da postavite OVERLOAD deklaraciju u INTERFACE odeljak jedinice. FixMulFix funkcija deklaracije mora da izgleda ovako:

function FixMulFix(F1, F2: Fixed16): Fixed16;
OVERLOAD * = FixMulFix;
...

9. Kako da izdvojim blokadu memorije u prvom megabajtu memorije?

Trebalo bi da koristite DOSMemoryAlloc (da izdvoji blokadu memorije) i DOSMemoryFree (da oslobodite blokadu memorije) funkcije iz DPMI jedinice.

Primer:

program DpmiDemo;
{$ifndef __DOS__}
  Wrong compilation target
{$endif}
uses DPMI;
var
  rmSeg: Word;
  LinAddr: DWord;
  rmRegs: TRmRegs;
  i: DWord;
begin
  // Allocate 256 bytes in lower memory and store the address
  // of the real mode segment
  rmSeg := DOSMemoryAlloc(256);
  if rmSeg = 0then
  begin
   Writeln('Not enough lower memory!');
   Halt(0);
  end;
  // Obtain linear protected mode address of real mode segment
  LinAddr := DWord(rmSeg) * 16;
  // Clear rmRegs structure (fill it with zero)
  ClearRmRegs(rmRegs);
  // VBE function 4F00h - GetVESAInfo
  rmRegs.AX := $4F00;
  // Real mode ES register = segment of allocated memory block
  rmRegs.ES := rmSeg;
  // Call VBE function 4F00h, which fills allocated block of
  // memory with VESA VBE information
  RealModeInt($10, rmRegs);
  Write('Signature: ');
  // Read the first 4 bytes from the lower memory block and
  // display them on the screen. If your video card supports VESA
  // VBE, you will see the word 'VESA'
  for i := LinAddr to LinAddr + 3 do Write(char(Pointer(i)^));
  // Free allocated memory block
  DOSMemoryFree(rmSeg);
end.

10. Kako kreirati i/ili koristiti DLL-ove u zaštićenim režimima MS-DOS aplikacije?

FrameworkPascal ne podržava generaciju DLL-a za MS-DOS aplikacije u zaštićenom režimu ili korišćenje DLL direktno u DOS-u (na isti način kao za OS/2 ili Win32 aplikacije). Međutim, postoji način da se to uradi pomoću DLL Manager od strane Virtual Research Group, koji se može preuzeti sa ove stranice.

11. Kako napisati windows GUI aplikacije sa FrameworkPascal kompajlerom?

FrameworkPascal pruža niz jednostavnih uzoraka windows GUI programa. Možete početi učenjem, modifikovanjem i proširivanjem istih prema vašim potrebama. Ako konvertujete postojeći kod počevši sa prototipom, ne ustručavajte se da kontaktirate podršku i tražite prilagođeni dizajn aplikacije koji smo u stanju da pripremimo za vas.

12. Pokušao sam da rekompajliram moje stare TP izvore sa FrameworkPascal kompajlerom, ali sam dobio nekoliko poruka o grešci. Da li nešto nije u redu tamo?

Nekim izvorima napisanim za 16-bitni Turbo Pascal je potrebna mala modifikacija da bi se kompajlirali u FrameworkPascal 32-bitnom režimu. Na primer, 16-bitni asembler ili linijske direktive moraju biti modifikovane na 32-bitne.

13. Napravio sam Win32 GUI aplikaciju koja koristi Graph biblioteku. Zašto to ne funkcioniše?

Jedinica Graph biblioteke za Win32 zahteva da je microsoft DirectX 3 ili noviji instaliran. Najnovija verzija DirectX se može preuzeti ovde..

14. Kako da se rešim PMODE/W logotipa u mojim MS-DOS aplikacijama?

Ovaj logo je deo PMODE/W licence i ne može se izbaciti. Isto važi i za DOS4/GW-bazirani (WSTUB.EXE). Međutim, predlažemo vam da koristite neki drugi DOS extender, kao što su PASSTUB.EXE, TMTSTUB.EXE, CWSTUB.EXE ili TMT32.EXE. Za svaki od ovih možete isključiti logotip putem -$logo- kompajler direktive.

15. Moram stvarno da izazovem realni režim prekida (npr. int 21h), i moram da podesim DS:DX prema segmentu: ofset pojedinih promenljivih podataka. Kako da to uradim?

Moguće je oponašati realni režim prekida preko specijalne DPMI funkcije, koja je implementirana u MsDos i Intr postupcima (pogledajte naš on-line pomoćni sistem za DOS jedinice opisa). Samo imajte na umu, da ćete morati da izdvojite blokadu podataka u niskoj memorijskoj oblasti (prvi megabajt) koristeći AllocDosMemoryBlock ili DosMemoryAlloc funkciju iz DPMI jedinice.

16. Zašto je "Single-Step" komanda u ugrađenom debageru toliko spora?

U single-step režimu ugrađeni debager obustavlja i nastavlja aplikaciju svaki put kada izvrši instrukciju procesora. Preporučujemo da izbegavate da koristite single-step komandu ako je moguće. Koristite komandu run-to-cursor umesto toga. Korisnija je i nije spora.

17. Kada pokušam da pokrenem program koji pravim, FrameworkPascal Pascal me ne upozorava na moje "greške koda". Samo kaže:

[Run Error]: koji god.EKSE nije pronađen.

Kako mogu da se rešim ovog problema?

Izgleda da koristite stariju TMT Lite verziju kompajlera samo za DOS za windows NT (Windows NT 3/4,Windows ili Windows XP). Problem je u tome što Win32 IDE ne može pravilno da radi sa MS-DOS verzijom kompajlera u NT. Postoje dva načina da se reši vaš problem: koristite Win'9x, ili kupite Pascal Multi-target izdanje, koje radi dobro sa bilo kojim Win32 operativnim sistemom, uključujući Windows NT 3/4, Windows 2000, i Windows XP.

18. Napisali ste da je FrameworkPascal kompajler opremljen sa debagerom na visokom nivou. Ja ne razumem šta "debager na visokom nivou" znači, Na primer, da li dozvoljava da podesite tačke prekida, izvedete step-through izvršavanje, pronađete run time greške, itd?

"Debager na visokom nivou" znači sledeće
1) Ugrađeni debager ne dozvoljava vam da otklonite greške u aplikaciji na asemblerskom jezičkom nivou. Najniža jedinica otklanjanja grešaka je Pascal source line, a ne Asemblerska jezička instrukcija.
2) Sa našim debagerom možete postaviti tačke prekida, run-to-cursor execution i naći run-time greške.
3) Ne postoji step-through komanda, ali možete izvršiti sporu single-step execution.
Međutim, mi vam preporučujemo da koristite run-to-cursor operaciju umesto, jer nije spora i jača je.
4) Možete da analizirate lokalne i globalne promenljive, kao i CPU registre kada se vaš program zaustavi na tački prekida, ili posle izvođenja run-to-cursor komande.

19. Kako mogu da pronađem informacije o windows API i Pascal funkcijama?

Detaljne informacije su dostupne u ugrađenom sistemu pomoći FrameworkPascal IDE i onlajn na http://www.frameworkpascal.com/online_docs.htm.

Nekoliko jednostavnih koraka verovatno će vas odvesti do relevantnih informacija. Pomoć za windows API i Pascal funkcije će najverovatnije biti u IDE pomoćnom sistemu. Otkucajte pojam za koji ste zainteresovani u IDE i pritisnite taster F1. Ako se pojam nalazi u pomoćnom sistemu njegova stranica će se otvoriti. Ako nema stranicu potražite taj terminu u pomoćnom sadržaju ili kao ključnu reč u meniju IDE Pomoćni meni. Ukoliko ste zainteresovani za određenu jedinicu, možete pronaći njen ulaz u On Line table of content, dostupan sa linka iznad. Za opštije pretrage možete da koristite Google naprednu pretragu dok ograničavate pretragu na www.frameworkpascal.com. To će navesti sve pomoćne i uzorak stranice u kojima se termin koji tražite pojavljuje. Još jedan koristan izvor informacija su uzorak programi. Pokušajte da pronađete funkcije i ključne reči za koje ste zainteresovani u Sample direktorijumu .pas datotekama. Možete da koristite Search / Find In Files meni u IDE, unesite putanju u Mask stavki u odeljku za pretragu ili izaberite ga iz drive mape klikom na ikonu desno od stavke. Rezultat pretrage će se pojaviti u prozoru Find Files na dnu IDE radnog prostora i klikom na ime fajla ćete ga otvoriti.

20. Kako mogu da izmenim i sastavim datoteke resursa (.res, .rc datoteke uključuju menije, ključeve akceleratora, dijaloge, ikone i bitmape i da li su povezani sa izvršnim programima)?

Možete da koristite microsoft Dialog Editor za windows NT (dlgedit.exe) koji je uključen u distribuciju. S druge strane, možete koristiti bilo koji drugi editor dijaloga, kao što su WEditRes utility koji je deo besplatnog LCC kompajlera (http://www.cs.virginia.edu/~lcc-win32).

rc fajlovi su prilično jednostavni za ručno uređivanje. Ovaj dvoredni batch fajl:
path = C:\Program Files\FWP.6\BIN;%path%
rc SeditSQL
dok kompajlira rc fajl koristi rc kompajler koji se nalazi u bin direktorijumu. Dodavanje menija, stavki menija, akceleratora ključeva i ikona je prilično jednostavno i brže kada promenite rc datoteke obezbeđene sa uzorcima programskih modela. Uređujte vaše rc fajlove koristeći IDE editor i pokrenite komandu gore navedenu u batch fajlu. RC kompajler izveštava o sintaksnoj grešci sa svojim resornim brojevima.

Published (Last edited): 13-12-2012 , source: http://www.frameworkpascal.com/faq.htm#L1