Novo

Forum kao aplikacija na telefonu

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

  • 2 odgovora
  • 4.799 pregleda

Najnovija ↓

adresa funkcije u dllu 27.08.2001. u 03:20 · pre 306 meseci #1
Potreban mi je file offset odredjene funkcije u dll-u.
U asm forumu mi je receno da treba da oduzmem vrednosti koje dobijem od GetProcAddress i LoadLibrary. Evo koda, ne znam gde gresim:
(izbacio sam provere tipa da li je DLL ucitan itd... i nisam siguran da li sam dobro uradio koverziju pointer u integer, tj. da li sam na ovaj nacin dobio vrednost koju ja zelim)

type TTestFunc=function:boolean;
var TestFunc:TTestFunc;

Handle:=LoadLibrary('DLLUnit.DLL');
...
@TestFunc:=GetProcAddress(Handle,'TestFunc');
...
fileoffset:=Handle-LongWord(addr(TestFunc));

Na ovaj nacin mi fileoffset ne pokazuje ono sto ja zelim. Gde gresim?

btw, a kako da otkrijem adresu te funkcije u memoriji kada se dll ucita?
Re: adresa funkcije u dllu 31.08.2002. u 21:58 · pre 294 meseca #2
Ja mislim da se adresa funkcije dobija sa getprocaddress()
Potpis
by samadhi
Let there be Pascal and God made Lazarus and blessed Linux
Re: adresa funkcije u dllu 31.08.2002. u 23:01 · pre 294 meseca #3
mislim da tebi ne treba fileoffset, jer je on offset na disku, a meni se cini da tebi treba pointer na funkciju u memoriji, kada se ucita, da bi mogao a je pozovesh.

nema potrebe da bilo sta oduzimash (mozda ako radish u asm-u, ali u delphi-u ne). evo ti kod za primer sa sve proverama za greske (to je vazno, narocito kad nesto ne radi, a ne znash sta ;)

Code:

// tackice zbog identa

type
....tTestFunc = function: boolean;

var
....hDll:THandle;
....TestFunc: tTestFunc;

begin
....hDll:=LoadLibrary('DLLUnit.dll);
....if hDll=0 then raise Exception.Create('Error loading dll !!!');
....@TestFunc:=GetProcAddress(hDll,'TestFunc');

....// i posle pozivash doticnu funkciju sa:

....if TestFunc then begin

........// bla truc

....end;
end;


btw, koliko vidim, ti si sam napravio taj dll, pa ako imash problema sa svim ovim, mozda je tu greska. probaj sa nekim tudjim dll-om koji provereno radi, pa kada naterash ovaj gornji kod da ti radi, onda isprobaj da ga naterash da radi i sa tvojim dll-om, a ako nece, u tvom dll-u trazi gresku...
Potpis
blogče :: unescaped beta
  »
go-paste extenzija
  »
reč dana: backup
  »
bočne koalicije
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme