Autor Téma: Práca s ukazovateľmi a Obsidium  (Přečteno 362 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4992
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Práca s ukazovateľmi a Obsidium
« kdy: 29-06-2020, 16:36:39 »

Kód: Delphi [Vybrat]
  1. procedure TForm1.btn1Click(Sender: TObject);
  2. const
  3.   bs = 0; //  skúšal som aj 128. Nemalo to žiaden vplyv.
  4. var
  5.   reginfo0: AnsiChar;
  6. begin
  7. //function obsGetLicenseInfoEx(dwInfoNr: LongWord; lpBuffer: PAnsiChar; dwBufSize: LongWord): Boolean;
  8. //dwInfoNr
  9. //UrčujeUrčuje, ktorý reťazec licenčných informácií sa má načítať. Platné hodnoty sú 0 - 3 (pozri časť poznámok).
  10. //lpBuffer
  11. //Ukazuje na medzipamäť, ktorú dostane reťazec. Ak je reťazec taký dlhý alebo dlhší ako medzipamäť,
  12. //  reťazec je skrátený a ukončený nulovým znakom.
  13. //dwBufSize
  14. //UrčujeUrčuje veľkosť dodanej vyrovnávacej pamäte v znakoch.
  15. .
  16.   if obsidium.obsGetLicenseInfoEx(0, @reginfo0, bs) then
  17.     ShowMessage(string(reginfo0))
  18.   else
  19.     ShowMessage('Neprešlo');
  20. end;
reginfo0 - obsahom má byť string.
  Ak to tak nastavím v deklaráciii premennej, tak pri ShowMessage dostanem AV.
  Ak tam je AnsiChar, ako to je teraz v príklade, tak sa mi vždy zobrazí "d", bez ohľadu na obsah údaju v key. Po dobehnutí udalosti dostanem AV.
.
Čo mám zle?
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2790
  • Karma: 134
    • Verze Delphi: D2007, XE3, DX10
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #1 kdy: 29-06-2020, 16:42:57 »
Čo mám zle?
No nemas alokovanou pamet pro ten buffer, ktery ma prijmout ANSI text. Bezne se to delava:
Kód: Delphi [Vybrat]
  1. var
  2.   reginfo0: AnsiString;
  3. ...
  4.   SetLength(reginfo0, MAX_BUFFER_SIZE);
  5.   //call
  6.   SetLength(reginfo0, actualLength);
  7.  

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4992
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #2 kdy: 29-06-2020, 17:02:35 »
Vďaka novému helpu neviem zistiť v ktorej jednotke je MAX_BUFFER_SIZE.
Ten actualLength má byť čo?
Ak nastavím lenght napr. na 526, aj tak dostávam AV.
Edit:
  MAX_BUFFER_SIZE := 65535;
« Poslední změna: 29-06-2020, 17:25:06 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4992
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #3 kdy: 29-06-2020, 17:48:42 »
Pri pokuse o prístup, ak to je AnsiString, vždy po zavolaní obsGetLicenseInfoEx dostanem AV. Nech robím čokoľvek. Včítane nastavenia veľkosti.
Ak to je AnsiChar, tak mám to spomenuté d.
Prikladám obrázok, na ktorom je vidieť obsah licence.key, s ktorým pracujem.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4992
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #4 kdy: 29-06-2020, 18:25:45 »
Jeden problém som našiel. Mám problém s ochranou exe. Preto mi vyhadzuje AV.
Musím zistiť ako sa dá urobiť chránené debug exe = bude chránené ale zároveň ho je možné krokovať. Mám obavu, že to nie je možné.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4992
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #5 kdy: 29-06-2020, 18:53:49 »

Dostal som riešenie. Žiaľ, Obsidium nemá nikde príklad. Aspoň ja som ho nenašiel.
Kód: Delphi [Vybrat]
  1. type
  2.   TinstallInfo = record
  3.      regInfo0,
  4.     regInfo1,
  5.     regInfo2: string;
  6. end:
  7. .
  8. var
  9. regInfo0: array[0..127] of ansichar;
  10. regInfo1: array[0..127] of ansichar;
  11. regInfo2: array[0..127] of ansichar;
  12. InstallInfo: TinstallInfo;
  13. .
  14. begin
  15.  if obsidium.obsStoreLicense(PAnsiChar(AnsiString(mmo1.Text))) = True then
  16.  begin
  17.   obsGetLicenseInfo(0, @regInfo0);
  18.   obsGetLicenseInfo(1, @regInfo1);
  19.   obsGetLicenseInfo(2, @regInfo2);
  20. .
  21.   InstallInfo.regInfo0 := regInfo0;
  22.   InstallInfo.regInfo1 := regInfo1;
  23.   InstallInfo.regInfo2 := regInfo2;
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 551
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #6 kdy: 29-06-2020, 19:37:56 »
ohľadom krokovania
potrebuješ súbory - nahradzajú licence.key

obsidium.dll a
obsidium.ini s obsahom
Kód: Delphi [Vybrat]
  1. [License]
  2. licensed=true
  3. licinfo0=Test lic
  4. licinfo1=my notebook
  5. licinfo2=11111^DS
  6. licinfo3=CS
  7.  
  8. systemid=RJ03FDR1DT94FWF014
  9. customvalue=0
  10. hash=00000000000000000000000000000000
  11. hash=98765432101234567890987654321012
  12. status=1
  13. expiration=100
  14. vm=false
  15.  
  16. [TimeTrial]
  17. trialdays=15
  18. trialruns=15
  19. initialtrialdays=15
  20. initialtrialruns=15
- to je moj konkretne


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4992
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #7 kdy: 29-06-2020, 19:57:28 »
DLL potrebujem tak či tak. Veľmi som sa čudoval, načo mi je ini súbor. Už viem :) Ďakujem. Vyskúšam.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2790
  • Karma: 134
    • Verze Delphi: D2007, XE3, DX10
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #8 kdy: 29-06-2020, 20:49:38 »
Dostal som riešenie. Žiaľ, Obsidium nemá nikde príklad. Aspoň ja som ho nenašiel.
Mozna se vratit k zakladum misto hledani prikladu: kdyz chci, aby mi metoda nekam vratila text, tak ji musim predat zacatek pameti, kterou jsem pro nej pripravil. To muzes udelat staticky, jako jsi to udelal s tim array, ale v Delphi se jako buffer typicky (zne)uzival reference counted string, protoze ho nebylo nutne uvolnovat, takze ta moje rada mela vyustit v neco takoveho:
Kód: Delphi [Vybrat]
  1. const
  2.   MAX_BUFFER_SIZE = 1024;
  3. var
  4.   lng: cardinal;
  5.   regInfo0: AnsiString;
  6. begin
  7.   SetLength(regInfo0, MAX_BUFFER_SIZE);
  8.   if obsGetLicenseInfo(0, @regInfo0[1]) then
  9.     SetLength(regInfo0, System.AnsiStrings.StrLen(@regInfo0[1]));
  10.  



Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4992
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #9 kdy: 29-06-2020, 20:55:09 »
Dostal som riešenie. Žiaľ, Obsidium nemá nikde príklad. Aspoň ja som ho nenašiel.
Mozna se vratit k zakladum misto hledani prikladu:
Keď ja sa nemám k čomu vrátiť. Ja tie základy jednoducho nemám :'( To riešenie si vyskúšam.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Jirka

  • Plnoletý
  • ***
  • Příspěvků: 236
  • Karma: 9
    • Verze Delphi: XE2
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #10 kdy: 29-06-2020, 21:16:39 »
Keď ja sa nemám k čomu vrátiť

Spíš bych řekl že se vracíš po roce a po dni  na místo činu  ;)

https://forum.delphi.cz/index.php/topic,16733.0/all.html

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4992
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #11 kdy: 29-06-2020, 21:22:13 »
Paráda, pekne to funguje.
Ten príspevok v odkaze je o niečom inom. Ale dobre, že si ho tu dal. Určite to budem potrebovať.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 584
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #12 kdy: 29-06-2020, 22:18:56 »
Stano, ešte včera si tu písal, že TMS Crypto má 2x viac možností ako Obsidium.
Dnes celý deň riešiš tú alternatívu, ktorú si naznačil, že zavrhneš.
Mohol by si zmieniť dôvod, prečo ideš cestou Obsidia. Asi je predsa vhodnejšie ako TMS Crypto??
Trochu mi pripadá, ako by si sa ani nechcel priblížiť k cieľu.
Inak by si sa nevyberal zbytočne komplikovanejšou cestou.
Ten odkaz od Jirka https://forum.delphi.cz/index.php/topic,16733.0/all.html naznačuje,
že TMS si už riešil/vyriešil v roku 2019.
Možno sa v tomto prípade mýlim, ale sledovaním tvojich dotazov som súhrnne dospel k vyššie uvedenej úvahe o ceste k cieľu.
Nielen v tomto prípade. Ak by to bolo náhodné, nepíšem.
Samozrejme, akceptujem, že otázky, čo kladieš sú oprávnené.
Ale ako človek, čo používa bežný zdravý sedliacky rozum, mi nedalo nevšimnúť si ten prístup.
PS
Ako si uzavrel tému
"Riešenie licencie podľa rokov a počtu bytov".
Podľa mňa je databáza na to naprosto ideálna.
Ušetrí kopu námahy.
Ak to chceš na lokále máš SQLite.
Dokonca kryptované.. V rámci FireDAC je na tú tému uvedené aj oficálne demo.

Navyše, ak neakceptuješ SQLite (kryptované), tak PF ti napísal, ako v DB obecne využiť v prípade potreby aj certifikát.
S tými triggermi by to bolo ozaj elegantné.
Naprogramovať časový manažment sám (bez využitia databázy), sa mi zdá dosť zložité.
Najmä v prípade neskorších úprav, by si proprietárne, tj. vlastné riešenie mohol oľutovať. Môže ti pridať priveľa zbytočnej námahy.
« Poslední změna: 29-06-2020, 22:37:01 od miroB »

Offline miroB

  • Guru
  • *****
  • Příspěvků: 584
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #13 kdy: 29-06-2020, 22:32:30 »
Mimochodom, v odkaze od Jirka na tvoj dotaz vidím, že Obsidian máš vo verzii Lite.
TMS Crypto, je asi plný. Nevidím, že by u TMS mali verziu Lite.
Lite má asi očakávateľne menej možností.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4992
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Práca s ukazovateľmi a Obsidium
« Odpověď #14 kdy: 30-06-2020, 07:51:56 »
Trochu na vysvetlenie. Obsidium (ochrana) a TMS Crypto (šifrovanie) slúžia na rôzne účely

  • Pôvodný zámer bol a aj je chrániť aplikáciu. Tak som si kúpil. TMS Crypto
  • Krátko na to sa tu František zmienil o Obisidiu. Tiež som si ho kúpil. Keby som sa to dozvedel skôr, tak by som si TMS Crypto nekúpil. Neviem, či ho niekedy využijem
  • Už mám Obsidium ver. x64.
  • Obsidium prvotne rieši bezpečnosť aplikácie - chráni ju. Vytvorí xxx.key. To čo dokáže urobiť, by som ja nikdy nedokázal
  • Certifikáty (tu TMS) mi umožňujú mať v nich chránené údaje, ktoré môžem ľahko aktualizovať a použiť na rôzne úlohy. Vytvorí xxx.crt
  • V každom prípade použijem Obsidium. Ak mi počtom položiek, alebo ich dĺžkou (128 znakov) xxx.key nebude stačiť, tak si zoberiem na pomoc TMS certifikát
Základnú časť úlohy už viem urobiť -  správne použiť Obsidium. Jej aplikovanie v programe už nebude také náročné. Nad tou ochranou DB porozmýšľam. Ako som písal hore, podľa situácie môže prísť k slovu aj TMS certifikát.
« Poslední změna: 30-06-2020, 07:55:09 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.