Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Ucitavanje funkcije preko njenog ordinala

[es] :: Pascal / Delphi / Kylix :: Ucitavanje funkcije preko njenog ordinala

[ Pregleda: 2217 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Ucitavanje funkcije preko njenog ordinala06.05.2005. u 13:08 - pre 201 meseci
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
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Ucitavanje funkcije preko njenog ordinala07.05.2005. u 05:36 - pre 201 meseci
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.
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.92.eunet.yu.



+1 Profil

icon Re: Ucitavanje funkcije preko njenog ordinala07.05.2005. u 09:26 - pre 201 meseci
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.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Ucitavanje funkcije preko njenog ordinala07.05.2005. u 15:09 - pre 201 meseci
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 ?
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.107.eunet.yu.



+1 Profil

icon Re: Ucitavanje funkcije preko njenog ordinala07.05.2005. u 16:17 - pre 201 meseci
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().
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Ucitavanje funkcije preko njenog ordinala

[ Pregleda: 2217 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.