Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 5 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.09.08
Prihlásený: 11.11.22
Príspevky: 69
Témy: 37
Príspevok NapísalOffline : 05.08.2011 16:43

Dobrý deň,
poprosil by som odpoveď na môj problém s DLL v D6. Vytvoril som si DLL s názvom strlib v adresári napr. E:\delphi\dll a podľa potreby ju aktualizujem novými funkciami. Po skompilovaní som ju prekopíroval k aplikácii.

Deklarácia funkcie v projekte
function SomeFunction(S: string): string; external 'strlib.dll';

Uvedenú DLL ale chcem používať aj v iných projektoch, a tak som v klauzule external zadal umiestnenie DLL

external 'E:\delphi\dll\strlib.dll';

Všetko je v poriadku, ale keď chcem dať aplikáciu na iný počítač, tak sa mi vyskytne problém s načítaním DLL, lebo adresár 'E:\delphi\dll' sa tam nenachádza. Zatiaľ som to vyriešil tak, že na užívateľskom počítači som vytvoril adresár 'C:\delphi\dll' , kde som nakopíroval DLL a pri tvorbe mojich aplikácií sa odvolávam na external 'C:\delphi\dll\strlib.dll'. Nedá sa umiestnenie DLL robiť elegantnejšie , tzn. možno zadať parameter external cez premennú ? Môj nápad s premennou

external varCesta_dll;

- hlási [Error] : Constant expression expected - ?


Ide to vôbec tak ako to ja myslím ?
Vďaka za Váš čas.


Online

Skúsený užívateľ
Skúsený užívateľ
Umiestnenie DLL

Registrovaný: 11.01.09
Prihlásený: 27.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOnline : 05.08.2011 17:12

Samozrejme, ze sa to da - explicitnym linkovanim. Priklad:
http://www.scalabium.com/faq/dct0130.htm


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.09.08
Prihlásený: 11.11.22
Príspevky: 69
Témy: 37
Príspevok Napísal autor témyOffline : 06.08.2011 8:49

Vďaka za odpoveď, statické a dynamické pripájanie dll som už nejak vyhelpoval, ale ani tento link mi nepomohol, asi som to slabo vysvetlil. Teda, v hlavnom unite mám deklarovanú globálnu premennú

varCesta_dll : string[60];

ktorej mám priradený string

varCesta_dll := 'E:\delphi\dll\strlib.dll';

V určitom unite deklarujem funkciu z dll (podla linku už aj s stdcall aj far)

function SomeFunction(S: string): string; stdcall; far; external varCesta_dll;

a tam mi hlási chybu

[Error] Constant expression expected

Kardinálna otázka : môže byť v external premenná ? V každom helpe vidím priamu deklaráciu DLL, napr. v linku

procedure ExecScript(UserID: Integer; ScriptName: PChar); stdcall; far; external 'yourDLLName.DLL';

Vďaka za Váš čas.


Online

Skúsený užívateľ
Skúsený užívateľ
Umiestnenie DLL

Registrovaný: 11.01.09
Prihlásený: 27.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOnline : 06.08.2011 18:24

No aj po tomto vysvetleni si myslim, ze riesenie je prave v tom linku :)
Skusim rozpisat to, co je v tom priklade, mozno to bude lepsie s okomentovnim. Najprv este odpoviem na otazku:
jasug píše:
môže byť v external premenná ?

Nemoze byt. Pretoze uz v dobe prekladu musi byt znamy nazov kniznice, ktora sa ma prilinkovat k programu ( bavime sa o pouziti 'external' , teda statickeho linkovania ).

Priklad:

Kód:
    // tuna budu vsetky prototypy funkcii, ktore sa maju nacitat z DLL knicnice
type
  TSomeFunction = procedure( s: string );

    // a tuna sa vytovria smerniky na dane typy funkcii, cez ktore sa neskor bude pristupovat k funkciam z knicnice
const
  SomeFunction: TSomeFunction = nil;

var
  hLib: THandle;
  varCesta_dll: string = 'E:\delphi\dll\strlib.dll';


// -- implementation --

  hLib:= LoadLibrary( PChar( varCesta_dll ) );
  if ( hLib < HINSTANCE_ERROR ) then begin
    ShowMessage( 'Kniznica nenajdena.' );
    Application.Terminate;
  end;

  try

      // druhy parameter funkcie GetProcAddress je skutocny nazov funkcie
    @SomeFunction := GetProcAddress( hLib, 'SomeFunction' );
 
      // ak sa funkcia v kniznici nasla, tak ju zavolaj - to uz staci upravit podla potreby
    if Assigned( SomeFunction ) then
      SomeFunction( 'nejaky retazec predany funkcii v DLL' );
    finally
      FreeLibrary( hLib );

  end;


Snad to uz je vystiznejsie.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.09.08
Prihlásený: 11.11.22
Príspevky: 69
Témy: 37
Príspevok Napísal autor témyOffline : 07.08.2011 14:34

Vďaka za informáciu, akceptujem nemožnosť deklarácie cesty k DLL, zaradím ten postup do aplikácie, vďaka za Tvoj čas.


Odpovedať na tému [ Príspevkov: 5 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Problem s kniznicou shell32.dll a sti.dll

v Operačné systémy Microsoft

3

556

18.04.2009 9:49

Horalka Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. php_mssql.dll (tiež sqlsrv.dll) problém, podobne ADOdb

v PHP, ASP

2

367

18.01.2017 8:51

mackooo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. user32.dll a shell32.dll Nepovolene premiestnenie...???

v Operačné systémy Microsoft

0

577

26.09.2007 13:22

kolci Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. user32.dll alebo SHELL32.dll

v Operačné systémy Microsoft

1

759

11.08.2010 19:15

Revolution Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Run DLL problém (tsiVi032.dll)

v Ostatné

4

578

15.09.2013 0:09

Marko289 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. umiestnenie fanov

v Modifikácie, návody a projekty

29

2659

21.04.2007 23:58

mimkork Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. predvolené umiestnenie

v Operačné systémy Microsoft

12

439

14.03.2015 21:08

hanesovic Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Umiestnenie Freezera

v Chladiče a všetky druhy chladenia

2

761

28.04.2006 18:36

Marian Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Umiestnenie routera

v Siete

1

296

26.12.2021 23:35

SKiLEX Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Umiestnenie prvku

v HTML, XHTML, XML, CSS

4

579

01.12.2007 11:43

emer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Umiestnenie subwoofera

v Zvuk

14

5699

08.05.2009 9:39

f4r0 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Umiestnenie zdroja

v PC skrinky a zdroje

2

577

08.08.2012 20:58

Sinky Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Umiestnenie videa zdarma

v Video programy

5

1543

17.12.2006 14:38

dakto1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Umiestnenie case fanu

v Chladiče a všetky druhy chladenia

13

519

29.03.2013 12:18

Smith Wesson Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. umiestnenie sekcie delphi

v Správy pre vedenie fóra

8

1436

19.11.2006 11:29

chio Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Umiestnenie videa na stránku

v HTML, XHTML, XML, CSS

1

510

16.04.2020 22:31

McDollar Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra