Delphide pointer kullanimi

Başlatan Zoroaster, 21 Mayıs 2017, 05:37:37

Zoroaster

RealVar:real;
IntVar:integer;
Buffer: array[0..10] of byte;

Degiskenlerim olsun. Pointer kullanarak Buffer alanindaki verileri real ve integer degiskenlere atmak istiyorum.

0,1,2,3 adreslerindeki 4 veriyi RealVar degiskenine real veriymis gibi nasil atarim?
1,2,3,4 adreslerindeki 4 veriyi IntVar degiskenine integer veriymis gibi nasil atarim?

Seytan deliginden kacti.

Zoroaster

#1
Sorunu cozdum.

      IPntr: PInteger;

      Ipntr:=Addr(Buffer[0]);

      facets:=IPntr^;

Islemi ile arrayda byte olarak sirali 4 veriyi integer deger olarak okuyorum.

Bu durumda real degisken de benzer sekilde cozulecek gorunuyor.

Fakat real degiskenlerin pointer tanimini bulamadim. (4 byte ile ifade edilen float sayilar)

PPntr:Real^;
Seytan deliginden kacti.

Salih

Alıntı yapılan: Zoroaster - 21 Mayıs 2017, 07:59:22
Sorunu cozdum.

      IPntr: PInteger;

      Ipntr:=Addr(Buffer[0]);

      facets:=IPntr^;

Islemi ile arrayda byte olarak sirali 4 veriyi integer deger olarak okuyorum.

Bu durumda real degisken de benzer sekilde cozulecek gorunuyor.

Fakat real degiskenlerin pointer tanimini bulamadim. (4 byte ile ifade edilen float sayilar)

PPntr:Real^;



Real ile Currency bire bir aynıdır. Real için yok ama Currency için PCurrency var.

var
  currPtr : PCurrency;

begin
  // Allocate storage for three currency variables
  GetMem(currPtr, 3 * SizeOf(Currency));

  // Fill out these currency variables
  currPtr^ := 123.45;
  Inc(currPtr);
  currPtr^ := 2.9;
  Inc(currPtr);
  currPtr^ := 87654321;

  // Now display these values
  Dec(currPtr, 2);
  ShowMessageFmt('Currency 1 = %m',[currPtr^]);
  Inc(currPtr);
  ShowMessageFmt('Currency 2 = %m',[currPtr^]);
  Inc(currPtr);
  ShowMessageFmt('Currency 3 = %m',[currPtr^]);
end;
    Currency 1 = £123.45
  Currency 2 = £2.90
  Currency 3 = £87,654,321.00



Zoroaster

#3
PCurrency n'n float oldugundan eminmisin?  Ustelik Currency 8 byte yani 64 bit.

Benim 32 Bit Float degerler okumam lazim.

4 byte veriyi 32 Bit float sayi olarak okutmayi beceremedim. Mecburen  4 byte verinin ne anlama geldigini mantis exponent hesabi yaptirarak uzun yoldan kod yazarak yapacagim.

Seytan deliginden kacti.

Salih

#4
Alıntı yapılan: Zoroaster - 21 Mayıs 2017, 15:41:43
PCurrency n'n float oldugundan eminmisin?  Ustelik Currency 8 byte yani 64 bit.

Benim 32 Bit Float degerler okumam lazim.

4 byte veriyi 32 Bit float sayi olarak okutmayi beceremedim. Mecburen  4 byte verinin ne anlama geldigini mantis exponent hesabi yaptirarak uzun yoldan kod yazarak yapacagim.




Kargaşa oldu gibi.


Eğer real tip kullanacaksan 64bit kullanıyorsun demektir,
32 bitlik floating istiyorsan single tip kullanmak gerekir.
Currency de 64bit ama bellekte yerleşimi real ile aynı değil.
Bit sayısı olarak olmasa da, bellekte yerleşimi açısından,
Pcurrency real için kullanılamaz gibi gözüküyor..

Senin işini Psingle görür.

engerex

Single 4 byte. Ayrıca Currency para birimleri için olduğundan beklediğinizden farklı davranma ihtimali mevcut.




   // Decimal data types :
   Dec1 : Single;   //  7  significant digits, exponent   -38 to +38
   Dec2 : Currency; // 50+ significant digits, fixed 4 decimal places
   Dec3 : Double;   // 15  significant digits, exponent  -308 to +308
   Dec4 : Extended; // 19  significant digits, exponent -4932 to +4932

Zoroaster

Alıntı yapılan: Salih - 21 Mayıs 2017, 22:54:27

Kargaşa oldu gibi.


Eğer real tip kullanacaksan 64bit kullanıyorsun demektir,
32 bitlik floating istiyorsan single tip kullanmak gerekir.
Currency de 64bit ama bellekte yerleşimi real ile aynı değil.
Bit sayısı olarak olmasa da, bellekte yerleşimi açısından,
Pcurrency real için kullanılamaz gibi gözüküyor..

Senin işini Psingle görür.

Real tipi 32 bit olarak biliyorum. Win10'a gectikten sonra Delphinin helpinden faydalanamaz oldum. Eskiden hemen bakip ne nedir bakabiliyordum.

Seytan deliginden kacti.

JKramer

Aynı sorun mu bilmiyorum ama help dosyalarıyla ilgili şunu deneyebilirsiniz: https://answers.microsoft.com/en-us/insider/forum/insider_wintp-insider_install/winhlp32-do-we-have-to-go-through-this-again/ddcc2f40-e4f3-407b-9672-ee8a2b08a71e
Alıntı Yap
Here is a solution (thanks to Komeil Bahmanpour):


Go to his site:
http://www.komeil.com/blog/windows-help-program-winhelp-winhlp32-exe


Download winhlp32-windows-7-x86-x64-komeil.cab:
http://www.komeil.com/download/1230


I needed a solution in order to get help working for Delphi Studio Architect on Windows 10.
Komeil's install.cmd file didn't work as is (its pre Win10) so I simply modified it.


Unpack the download (Install.cmd, winhlp32.exe, winhlp32.exe.mui) to a new directory. Edit the install.cmd and add the following two lines to the 'settings' section:


set WindowsVersion=7
goto :BypassVersionError
(yes, 'WindowsVersion=7' is correct.) Save the file and execute as administrator.


All should go without error. Delphi help, and every other help file I've tried, now works exactly as it should!