[ twister @ 27.08.2001. 02:20 ] @
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?
[ mikap @ 31.08.2002. 20:58 ] @
Ja mislim da se adresa funkcije dobija sa getprocaddress()
[ -zombie- @ 31.08.2002. 22:01 ] @
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...