[ reiser @ 06.05.2005. 13:08 ] @
Moze li se sa GetProcAddress() funkcijom dobiti pointer ka nekoj funkciji iz odredjenog DLL-a, ciji handle dobijam sa LoadLibrary() ? Ali, ne preko imena funkcije vec preko njenog ordinal broja ?

Hvala
[ reiser @ 07.05.2005. 05:36 ] @
Code:

var
  Funkcija : procedure; stdcall;
  hLib        : Cardinal;
begin
  hLib := LoadLibrary('ime_library-a');
  @Funkcija := GetProcAddress(hLib, PAnsiChar(LOWORD(ordinal_fje)));
  FreeLibrary(hLib);
  If @Funkcija = nil Then
    Exit;


Resio sam problem.
[ morlic @ 07.05.2005. 09:26 ] @
Pazi, u primeru se radi odmah FreeLibrary(). Posle toga ne mozes koristiti funkciju ciju si adresu dobio. Znaci poziva se po zavrsetku koriscenja funkcije.

Naravno moras da pazis sta radis i ako funkcija koju pozivas radi u nekoj vrsti asinhronog rezima, tj. vraca izvrsavanje odmah na tvoj kod, ali inicira neki proces unutar dll-a koji se ne zavrsava tako brzo. Mada mislim da ces retko koristiti takve stvari, barem ne dinamicki.
[ reiser @ 07.05.2005. 15:09 ] @
Hvala, tek sam danas uocio da posle FreeLibrary() ucitana funkcija nece raditi. A shvatio sam i zasto ;)

Reci mi jos ovo. GetModuleHandle vraca handle do VEC UCITANOG modula, odnosno DLLa ? To znaci da ako GetModuleHandle vrati 0, nijedan proces nece moci da poziva fje iz tog dll-a, vec mora prvo sa LoadLibrary da ucita taj dll ?
[ morlic @ 07.05.2005. 16:17 ] @
Svaki proces posebno ucitava dll, i handle iz jednog procesa nije moguce koristiti u drugom procesu. Znaci modul mora biti ucitan da bi se ovom funkcijom dobio handle.

Kada uradis FreeLibrary() handle koji si eventualno ranije uzeo u toku rada programa nece biti vazeci, tako da moras da pazis kako radis sa FreeLibrary() ili koristi GetModuleHandleEx() sa flagom GET_MODULE_HANDLE_EX_FLAG_PIN, koji ti omogucava da se "osiguras" od FreeLibrary().