Einzelnen Beitrag anzeigen

TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.891 Beiträge
 
Delphi 12 Athens
 
#12

Re: DLL Einbindung - Fehler beim Beenden

  Alt 2. Aug 2006, 11:55
Hallo!

Du solltest Deine Objekte grundsätzlich nicht über Destroy sondern über Free zerstören. Free gibt nämlich auch den Speicher wieder frei.

Außerdem hast Du StrGr_Aenderung nicht zerstört.

Anbei nochmal Dein Code, mit Free. Ich habe außerdem das try-finally-Konstruct umgebaut, damit auch wirklich alles freigegeben wird.

Delphi-Quellcode:
library Aenderungsinfo;
uses
  ShareMem,
  SysUtils,
  Dialogs,
  StdCtrls,
  Forms,
  Classes,
  Grids,
  kbmMemTable,
  uSOAPClient,
  QGraphics,
  Controls;

{$R *.res}

procedure benutzerdetails_anzeigen(provider,eindeutiges_feld,aktueller_eintrag,aktueller_eintrag_detail:string);stdcall; export;
var
  Form1:TForm;
  StrGr_Aenderung:TStringgrid;
  SoapManager:TSoapManager;
  SMT_Table:TSoapMemTable;
begin
  Form1:=TForm.Create(nil);
  SoapManager:=TSoapManager.Create(nil);
  SMT_Table:=TSoapMemTable.Create(nil);
  StrGr_Aenderung:=TStringgrid.Create(nil);
  try
    Form1.Caption:='Datensatzdetails: '+aktueller_eintrag+' - '+aktueller_eintrag_detail;
    Form1.Position:=poScreenCenter;
    Form1.BorderStyle:=bsdialog;
    SoapManager.Active:=True;

    SMT_Table.SOAPManager:=SoapManager;
    SMT_Table.ProviderName:=provider;
    SMT_Table.Active:=True;
    SMT_Table.Filtered:=True;
    SMT_Table.Filter:=eindeutiges_feld+'='''+aktueller_eintrag+'''';
    SMT_Table.Refresh;

    Form1.Height:=80;
    Form1.Width:=410;

    with StrGr_Aenderung do
    begin
      Parent:=Form1;
      DefaultRowHeight:=20;
      Align:=alClient;
      if Form1.Height - Form1.ClientHeight > 28 then Form1.ClientHeight:=40 else Form1.ClientHeight:=45;//Form1.ClientHeight - (ClientHeight - Height);
      Form1.Width:=410;

      ColCount:=4;
      ColWidths[1]:=110;
      ColWidths[2]:=100;
      ColWidths[3]:=110;
      ColWidths[0]:=Width - ColWidths[1] - ColWidths[2] - ColWidths[3] - 7;
      RowCount:=2;
      FixedCols:=0;
      Cells[0,0]:=' Anlage von:';
      Cells[1,0]:=' Anlagedatum:';
      Cells[2,0]:=' Änderung von:';
      Cells[3,0]:=' Änderungsdatum:';
      Cells[0,1]:=SMT_Table.FieldbyName('benutzer_neu').asstring;
      Cells[1,1]:=SMT_Table.FieldbyName('datum_neu').asstring;
      Cells[2,1]:=SMT_Table.FieldbyName('benutzer_aend').asstring;
      Cells[3,1]:=SMT_Table.FieldbyName('datum_aend').asstring;
      StrGr_Aenderung.Options:= [goFixedHorzLine, goFixedVertLine, goHorzLine, goVertLine];
    end;
    Form1.Update;
    Form1.ShowModal;
  finally
    StrGr_Aenderung.Free; // fehlte ganz
    SMT_Table.Free;
    SoapManager.Free;
    Form1.Free;
   end;
end;

exports
  benutzerdetails_anzeigen;
Code ist ungetestet, da mir einige Units fehlen.

Hope it helps

onlinekater
Thomas Breitkreuz
  Mit Zitat antworten Zitat