Einzelnen Beitrag anzeigen

Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#21

Re: .NET Anwendung stürzt ab

  Alt 26. Okt 2009, 21:40
Du benutzt da "datei.Free". Deshalb muss ich wohl annehmen, dass du entweder kein Oxygene nutzt, oder ShineOn benutzt.
ShineOn ist eine Library, die Delphi-Krams in .Net zu emulieren versucht.

Eine rein theorethische Möglickeit für eine TypeloadEx wäre das Free.
Aber nur um 5 Ecken und 7 Kanten...
In der Datei TObject.pas würdest du das hier finden und wenn alle Odds und der Rest des Universums gegen dich verschworen wären, wäre es vllt möglich, dass der class ctor von DisposableHelper<FileStream> mit einer SecurityException stirbt.
Delphi-Quellcode:
105   procedure TObjectExtender.Free(o: Object);
106   begin
107    o.Destroy;
108   end;
109   
110   type
111    DisposableHelper<T> nested in TObjectExtender
112    = private static class
113    public
114    constructor;
115    property DisposeCall : Action<T>; readonly;
116    procedure DisposeReferenceType(o: T);
117    procedure DisposeValueType(o: T);
118    end;
119   
120   procedure TObjectExtender.Destroy<T>(o: T);
121   begin
122    // dispose, if necessary. noop, otherwise.
123    DisposableHelper<T>.DisposeCall(o);
124   end;
125   
126   procedure TObjectExtender.Free<T>(o: T);
127   begin
128    Destroy<T>(o);
129   end;
130   
131   constructor TObjectExtender.DisposableHelper<T>;
132   begin
133    var typeRef := typeOf(T);
134    var call : Action<T>;
135    // dispose, if necessary. noop, otherwise.
136    if not typeRef.IsSealed
137    or typeOf(IDisposable).IsAssignableFrom(typeRef) then
138    call := @DisposeReferenceType
139    else
140    call := @DisposeValueType;
141   
142    DisposeCall := call;
143   end;
144   
145   procedure TObjectExtender.DisposableHelper<T>.DisposeReferenceType(o: T);
146   begin
147    TObjectExtender.Destroy(Object(o));
148   end;
149   
150   procedure TObjectExtender.DisposableHelper<T>.DisposeValueType(o: T);
151   begin
152    // noop
153   end;
Edit: Okay da hätte ich wohl vorher die Seite aktualisieren sollen.
Ich lasse es trotzdem drin, vllt. hilft es ja dem nächsten, der über sowas stolpert...
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat