Problemer med dll
Jeg har et meget alvorligt problem, som jeg håber nogen kan hjælpe mig med.Mit DLL efterlader hukommelse og giver også acces violation indimellem.
Delphi version: 3.0
Tester hukommelsen med: Memory Sleuth ver. 1.59
Sleuth viser at der Efterlades 92byte, 5pointers, 1pen, 1brushe, 1font.
Sleuth giver ingen liniehenvisninger på den efterladte hukommelse (jeg har slået alt til under options-compiler-debugning og options-linker-include TD32 debuginfo)
Sleuth giver dette under Debug Output:
Client caused an access violation at 23456Ch
while attempting to write to 30F78h.
Flags:0h.
Jeg ved ikke hvad jeg kan bruge dette til, jeg har prøvet at bruge Search error.
Jeg er egentlig igang med et større projekt, men har fjernet alt andet end det, som giver problemerne.
Følgende filer er bruget:
ExeProject.dpr, ExeUnit.pas, DllProject.dpr, DllUnit.pas.
ExeProject.dpr:
program ExeProject;
uses
{ShareMem,}
Forms,
ExeUnit in 'ExeUnit.pas' {ExeForm};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TExeForm, ExeForm);
Application.Run;
end.
ExeUnit.pas:
unit ExeUnit;
interface
uses
{ShareMem, }Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TExeForm = class(TForm)
DllCallBtn: TButton;
procedure DllCallBtnClick(Sender: TObject);
private
public
end;
var
ExeForm: TExeForm;
implementation
{$R *.DFM}
Function SayHello(Var Num1:LongInt):LongInt; stdcall; external 'DllProject.dll';
procedure TExeForm.DllCallBtnClick(Sender: TObject);
Var
LI1:LongInt;
LI2:LongInt;
begin
LI1 := -7;
LI2 := SayHello(LI1);
end;
end.
DllProject.dpr:
library DllProject;
uses
{ShareMem,}
SysUtils,
Classes,
DllUnit in 'DllUnit.pas' {DllForm};
exports
SayHello;
{$R *.RES}
begin
end.
DllUnit.pas:
unit DllUnit;
interface
uses
{ShareMem, }Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TDllForm = class(TForm)
CloseBtn: TButton;
HelloLbl: TLabel;
procedure CloseBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DllForm: TDllForm;
Function SayHello(Var HelloNum:LongInt): LongInt; export; stdcall;
implementation
{$R *.DFM}
Function SayHello(Var HelloNum:LongInt): LongInt;
Begin
DllForm := tDllForm.Create(Application);
Try
HelloNum := 54321;
DllForm.ShowModal;
Result := 123;
Finally
DllForm.Release;
DllForm := Nil;
End;
End;
procedure TDllForm.CloseBtnClick(Sender: TObject);
begin
Close;
end;
end.
