Avatar billede sirius Nybegynder
14. februar 2002 - 21:34 Der er 3 kommentarer og
1 løsning

Fejl når jeg afslutter program

Hejsa

Jeg er ved at lave en DLL fil som skal bruges til at få information fra en q3 server..

jeg har så lavet et lille program til at teste DLL filen. Umidelbart virker det fint nok men når jeg afslutter programmet kommer der en fejl, som jeg ikke ved hvad skyldes...

program og dll + source kode kan hentes her:
http://www.huah.dk/dll.zip

/sirius
Avatar billede dkn Nybegynder
14. februar 2002 - 22:04 #1
jeg ved ikke, jeg tror der er lidt problemmer med form destroy.
Måske det vil hjælpe bare sådan her:

procedure TForm1.FormDestroy(Sender: TObject);
begin
  if dllopened then
    q3Exit;
end;
Avatar billede Slettet bruger
14. februar 2002 - 22:11 #2
du kan fjerne den igen
FreeLibrary(Handle);
Hvor Handle er den variabel du brugte da du indlæste DLL en,
Eller du kan indlæse den statisk sådan
Procedure Proc External 'XX.Dll';
hvis det var en dynamisk indlæst dll.

Mvh. Simon
Avatar billede Slettet bruger
14. februar 2002 - 22:28 #3
Jeg kan ikke teste det men
Prøv at fjærne alle
stdcall;
og et lille tip brug ikke string variabler i en dll lav enten en
PChar eller et Array of Char;

Mvh. Simon
Avatar billede Slettet bruger
14. februar 2002 - 22:43 #4
Fjærn den tomme parameterliste

Du kan indlæse den dynamisk sådan

unit functions;

interface

uses
  Forms, Windows, Dialogs{Kan Fjerner hvis du ikke vil vise nogen beksed};
    Type
  T_q3Init=procedure (MainApp : TApplication);
  T_q3Query=Procedure (server: string; port: integer);
  T_q3Exit=Procedure;

var
q3Init:T_q3Init;
q3Query:T_q3Query;
q3Exit:T_q3Exit;
Handle:Integer;
Procedure LoadDLL;
Procedure ReleaseDLL;

implementation

Procedure LoadDLL;
Begin
    ChDir(paramstr(0));
    Handle:=LoadLibrary(PChar(Paramstr(0)+'Quacke3.dll'));
    if Handle <> 0 then
    begin
    q3Init:=T_q3Init(GetProcAddress(Handle, 'q3Init'));
    q3Query:=T_q3Query(GetProcAddress(Handle, 'q3Query'));
    q3Exit:=T_q3Exit(GetProcAddress(Handle, 'q3Exit'));
    if  Not Assigned(q3Init) or Not Assigned(q3Query) or
    Not Assigned(q3Exit) then
    Begin
    Showmessage('Der er en fejl i Quacke3.dll');
    Application.Terminate;
    ReleaseDLL;
    End;
    End
    Else
    Begin
    Showmessage('Sørg venligst for at filen Quacke3.dll er i '#13'samme mappe som dette program.');
    Application.Terminate;
    ReleaseDLL;
    End;
End;

Procedure ReleaseDLL;
Begin
    q3Init:=Nil;
    q3Query:=Nil;
    q3Exit:=Nil;
    FreeLibrary(Handle);
End;

end.



Mvh. Simon
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester