[ Príspevkov: 5 ] 
AutorSpráva
Offline

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

Registrovaný: 05.09.08
Prihlásený: 09.12.20
Príspevky: 69
Témy: 37 | 37
NapísalOffline : 05.08.2011 16:43 | Umiestnenie DLL

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.


Offline

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

Registrovaný: 11.01.09
Prihlásený: 19.12.20
Príspevky: 1290
Témy: 9 | 9
Bydlisko: HE
NapísalOffline : 05.08.2011 17:12 | Umiestnenie DLL

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ý: 09.12.20
Príspevky: 69
Témy: 37 | 37
Napísal autor témyOffline : 06.08.2011 8:49 | Umiestnenie DLL

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.


Offline

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

Registrovaný: 11.01.09
Prihlásený: 19.12.20
Príspevky: 1290
Témy: 9 | 9
Bydlisko: HE
NapísalOffline : 06.08.2011 18:24 | Umiestnenie DLL

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ý: 09.12.20
Príspevky: 69
Témy: 37 | 37
Napísal autor témyOffline : 07.08.2011 14:34 | Umiestnenie DLL

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.


 [ Príspevkov: 5 ] 


Umiestnenie DLL



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

455

18.04.2009 9:49

Horalka

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

248

18.01.2017 8:51

mackooo

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

400

26.09.2007 13:22

kolci

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

Run DLL problém (tsiVi032.dll)

v Ostatné

4

446

15.09.2013 0:09

Marko289

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

user32.dll alebo SHELL32.dll

v Operačné systémy Microsoft

1

632

11.08.2010 19:15

Revolution

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

Umiestnenie subwoofera

v Zvuk

14

4862

08.05.2009 9:39

f4r0

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

Umiestnenie zdroja

v PC skrinky a zdroje

2

450

08.08.2012 20:58

Sinky

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

umiestnenie fanov

v Modifikácie, návody a projekty

29

2536

21.04.2007 23:58

mimkork

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

predvolené umiestnenie

v Operačné systémy Microsoft

12

277

14.03.2015 21:08

hanesovic

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

Umiestnenie Freezera

v Chladiče a všetky druhy chladenia

2

664

28.04.2006 18:36

Marian

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

Umiestnenie prvku

v HTML, XHTML, XML, CSS

4

458

01.12.2007 11:43

emer

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

Umiestnenie videa zdarma

v Video programy

5

1391

17.12.2006 14:38

dakto1

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

Umiestnenie case fanu

v Chladiče a všetky druhy chladenia

13

377

29.03.2013 12:18

Smith Wesson

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

umiestnenie sekcie delphi

v Správy pre vedenie fóra

8

1318

19.11.2006 11:29

chio

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

tunel > umiestnenie ventilatoru ...

v Modifikácie, návody a projekty

5

1667

10.11.2009 20:37

buslo

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

Vyrez a umiestnenie neonu...

v Modifikácie, návody a projekty

15

2370

26.05.2008 22:31

myio



© 2005 - 2021 PCforum, edited by JanoF