Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 3.379 pregleda

Najnovija ↓

Ucitavanje funkcije preko njenog ordinala 06.05.2005. u 14:08 · pre 261 mesec #1
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
Re: Ucitavanje funkcije preko njenog ordinala 07.05.2005. u 06:36 · pre 261 mesec #2
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.
Re: Ucitavanje funkcije preko njenog ordinala 07.05.2005. u 10:26 · pre 261 mesec #3
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.
Re: Ucitavanje funkcije preko njenog ordinala 07.05.2005. u 16:09 · pre 261 mesec #4
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 ?
Re: Ucitavanje funkcije preko njenog ordinala 07.05.2005. u 17:17 · pre 261 mesec #5
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().
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme