20. august 2005 - 10:00Der er
9 kommentarer og 1 løsning
Hvordan bruger man Initialization i en dll?
Hej,
Er der nogle gode og simple eksempler på hvordan man kan bruge initialization i en dll til at sætte nogle variable værdier som skal værre konstant under hele dll'ens leve tid?
Jeg vil helst undgå at sende alle konstante variabler hver gang jeg laver en beregning. Eller skal jeg hver gang kalder sende en pointer til en record som så bruges i dll'en?
Jeg har følgende dll:
library dll;
uses SysUtils, Classes;
{$R *.res}
function Score(seq:pchar):real;export; var I:integer; begin score:=length(seq); end;
exports score; begin end.
Som jeg kalder med:
procedure TForm1.Button1Click(Sender: TObject); begin DLLHandle := LoadLibrary('dll.dll'); //her vil jeg godt have sat nogle variabler som er konstante if DLLHandle <> 0 then begin @ShowScore :=GetProcAddress(DLLHandle, 'Score'); memo1.Lines.Add(floattostr(Showscore(PChar(edit1.text)))); end; FreeLibrary(DLLHandle); end;
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Det skal være variabler. Det skal værre muligt at ændre dem med forskellig kald af dll'en. Når dll'en er loaded skal den kaldes mange gange med de samme variabler men det er også nødvendigt at ændre dem over tid.
Jo det virker fint, men jeg ville helst kunne sætte DinDllVar fra den unit som kalder programmet.
Jeg kan selvfølgelige gøre det ved at "kalde programmet" gemmer alle settings i en fil som så loades ind mellem begin og end. til sidst i dll'en og derved sætter alle variabbler.
Det der står mellem begin og end. i dll'en bliver det kun kørt når dll'en loades?
bør jeg lave noget oprydning eller er det nok at bruge FreeLibrary(DLLHandle)?
Jeg har lige lavt en test for at forsøge at besvare mine egne spørgsmål.
Jeg gemte en setting i en fil som så blev loaded af dll'en for at sætte variablen.
Jeg forsøgt nu at kalde dll'en igen uden at bruge free og uden at loade dll'en igen. Det virkede - denne samme variable blev brugt.
Nu forsøgte jeg så at bruge FreeLibrary(DLLHandle); ændre fil settings også loade dll'en igen og kalde dll functionen igen. Nu var det stadig den gamle setting som blev brugt :-(?
Så jeg skal åbenbart lave mere oprydning end bare FreeLibrary(DLLHandle).
Hvis der er et æørende program som holder DLL'en åben så frigives den først endeligt når dette program også lukkes. Alle programmer som bruger DLL'en skal altså være lukket før at du får initialiseret din DLL med de nye settings fra filen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.