Autor Téma: Delphi 12 dostupné  (Přečteno 2083 krát)

Offline jirka52

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 3
    • Verze Delphi: D2, D5, D6, D2005, D2006, D2009, DXE2,DXE7,D10.2, D11.2
Re:Delphi 12 dostupné
« Odpověď #15 kdy: 14-11-2023, 12:53:08 »
GetMem(FBuffer, 4096);

Offline jirka52

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 3
    • Verze Delphi: D2, D5, D6, D2005, D2006, D2009, DXE2,DXE7,D10.2, D11.2
Re:Delphi 12 dostupné
« Odpověď #16 kdy: 14-11-2023, 13:15:57 »
Každopádně v Delphi 11.3. to funguje korektně, jak 32 bit, tak 64 bit, tak aspoň něco.
Prostě si počkám na opravu v Delphi 12.1.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3412
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 12 dostupné
« Odpověď #17 kdy: 14-11-2023, 13:26:11 »
Tazke testovaci aplikace nebude? Co je to za stream? Neslysel jsem o zadnem problemu, a tak se pripadne neopravi, pokud nebude ukazana chyba. Muze se jednat o nejaky specialni stream?
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3412
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 12 dostupné
« Odpověď #18 kdy: 14-11-2023, 19:06:49 »
takze, jak jsem rekl, funguje normalne, a to jak

Kód: Delphi [Vybrat]
  1. var
  2.   fs: TFileStream;
  3.   buf: PAnsiChar;
  4.   i: Integer;
  5. begin
  6.   GetMem(buf, 4096);
  7.   fs := TFileStream.Create(ExtractFilePath(ParamStr(0)) 'demo.txt', fmOpenRead);
  8.   i:= fs.Read(buf[1], 4096);
  9.   ShowMessage(IntToStr(i));
  10.   Memo1.Text := Copy(buf, 1, 4096);
  11.   fs.Free;
  12. end;

tak treba i

Kód: Delphi [Vybrat]
  1. var
  2.   fs: TFileStream;
  3.   buf: Ansistring;
  4.   i: Integer;
  5. begin
  6.   SetLength(buf, 4096);
  7.   fs := TFileStream.Create(ExtractFilePath(ParamStr(0)) 'demo.txt', fmOpenRead);
  8.   i:= fs.Read(buf[1], 4096);
  9.   ShowMessage(IntToStr(i));
  10.   Memo1.Text := Copy(buf, 1, 4096);
  11.   fs.Free;
  12. end;

i

  i:= fs.Read(buf^, 4096);
« Poslední změna: 14-11-2023, 19:08:43 od Radek Červinka »
Embarcadero MVP - Czech republic

Offline vandrovnik

  • Padawan
  • ******
  • Příspěvků: 1555
  • Karma: 52
    • Verze Delphi: 11.3
Re:Delphi 12 dostupné
« Odpověď #19 kdy: 14-11-2023, 19:34:16 »
Kód: Delphi [Vybrat]
  1.   buf: PAnsiChar;
  2. ...
  3.   i:= fs.Read(buf[1], 4096);
  4.  

Nemělo by tam být buf[0] ?

Offline jirka52

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 3
    • Verze Delphi: D2, D5, D6, D2005, D2006, D2009, DXE2,DXE7,D10.2, D11.2
Re:Delphi 12 dostupné
« Odpověď #20 kdy: 15-11-2023, 05:51:00 »
Právě zjišťuji, kde je problém. Jedná se o kód uvnitř komponenty, který jsem nepsal a spolehlivě funguje dost dlouho.

Offline jirka52

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 3
    • Verze Delphi: D2, D5, D6, D2005, D2006, D2009, DXE2,DXE7,D10.2, D11.2
Re:Delphi 12 dostupné
« Odpověď #21 kdy: 15-11-2023, 06:10:26 »
Je to nějaký divný.
V D12, 32 bit příkaz
FBufEnd := FStream.Read(FBuffer^, 4096);
stream přečte a uloží do předem alokované paměti.
Ale v D12 64 bit taky přečte daný počet bytů - vrací to hodnota fce Read, ale  FBuffer je prázdná.

Offline jirka52

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 3
    • Verze Delphi: D2, D5, D6, D2005, D2006, D2009, DXE2,DXE7,D10.2, D11.2
Re:Delphi 12 dostupné
« Odpověď #22 kdy: 15-11-2023, 07:18:26 »
Už jsem na to přišel. Ten stream, který do toho vstupuje, je v 64 bit prázdný.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3412
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 12 dostupné
« Odpověď #23 kdy: 15-11-2023, 07:19:45 »
Kód: Delphi [Vybrat]
  1.   buf: PAnsiChar;
  2. ...
  3.   i:= fs.Read(buf[1], 4096);
  4.  

Nemělo by tam být buf[0] ?

No ja si tim nejsem jisty, podle toho, jak se k tomu asi pak chovas.
Ja jsem prvni napsal tu variantu s tim SetLength, kdy jsem si byl jisty ze mam alokaci dobre, a data zacinaji na [1], a pak jsem zkusil to GetMem, ale neuvedomil jsem si, ze je to trosku neco jineho a nejsem si jist jak se k tomu dal kompilator postavi a kam presne FBuffer^ ukaze, a asi neni uplne korektni pak ta operace s Copy (myslim tim v te varianta s GetMem).
Ale jako ciste buffer na PAnsiChar to fungovat bude.
Embarcadero MVP - Czech republic

Offline jirka52

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 3
    • Verze Delphi: D2, D5, D6, D2005, D2006, D2009, DXE2,DXE7,D10.2, D11.2
Re:Delphi 12 dostupné
« Odpověď #24 kdy: 15-11-2023, 07:52:56 »
Ještě než vlezu do celé procedury, tak si uložím stream do souboru.
V Delphi 12, 64 bit je tento soubor prázdný

Offline jirka52

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 3
    • Verze Delphi: D2, D5, D6, D2005, D2006, D2009, DXE2,DXE7,D10.2, D11.2
Re:Delphi 12 dostupné
« Odpověď #25 kdy: 15-11-2023, 08:02:27 »
Takže jsem to našel. Blob, který je uložený v databázi, je po uložení do memory streamu prázdný.
Pouze a jen v D12, 64 bit.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3412
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 12 dostupné
« Odpověď #26 kdy: 15-11-2023, 08:04:41 »
Takže jsem to našel. Blob, který je uložený v databázi, je po uložení do memory streamu prázdný.
Pouze a jen v D12, 64 bit.

Prazdny znamena ze, fs.Size  = 0?
Embarcadero MVP - Czech republic

Offline jirka52

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 3
    • Verze Delphi: D2, D5, D6, D2005, D2006, D2009, DXE2,DXE7,D10.2, D11.2
Re:Delphi 12 dostupné
« Odpověď #27 kdy: 15-11-2023, 08:31:11 »
Právě že ne. Soubor má velikost 5748 B a obsahuje samé NUL hodnoty
Neboli stream opravdu nemůže nic přečíst.

Offline jirka52

  • Plnoletý
  • ***
  • Příspěvků: 147
  • Karma: 3
    • Verze Delphi: D2, D5, D6, D2005, D2006, D2009, DXE2,DXE7,D10.2, D11.2
Re:Delphi 12 dostupné
« Odpověď #28 kdy: 15-11-2023, 08:37:52 »
Aplikace používá Dbexpress. Stahuji blob z databáze (Oracle) a když si v D12 64 bitblob uložím, tak je prázdný.
Zkoušel jsem použít Dbxora.dll  z D11.3, ale nepomohlo to

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3412
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 12 dostupné
« Odpověď #29 kdy: 15-11-2023, 08:50:28 »
1)

A kdyz das
var
  xx: TBytes;

xx := dataset.FieldByName('xxxx').AsBytes;

tak to xx obsahuje co?

2)
Mas v Project / Options / Linking/ zapnuto nebo vypnuto
- Support address space Layout randomize a
- Support High Entropy?
Embarcadero MVP - Czech republic