Delphi 10.4 Sydney
|
4. Mär 2013, 13:34
Hallo Stevie,
ich habe mir am Freitag (1. März) die Sourcen für DSharp und Spring gezogen, um mir deine Lösungen für MVVM näher anzuschauen.
Auf den ersten Blick bin ich schwer begeistert.
Es ist geradezu Magie am Werk!
Aber das MVVM\Explorer Sample ist defekt.
Zuerst eine Kleinigkeit: Es fehlen die Verweise in der Projektdatei auf ..\..\..\Source\Aspects und ..\..\..\Source\Logging.
Auch andere Beispielprojekte haben nicht alle Suchpfade inkludiert.
Aber nun das Problem:
Beim Ausführen (mit XE3 Prof) kommt es zu einer Exception:
Code:
---------------------------
Debugger Exception Notification
---------------------------
Project Explorer.exe raised exception class $C0000096 with message 'privileged instruction at 0x024d37f0'.
---------------------------
Break Continue Help
---------------------------
Ein Klick auf Break zeigt dann diesen Callstack:
Code:
:024637f0
System.Rtti.RawInvoke(???,???)
System.Rtti.Invoke($95BCD4,((($95BBB0, Pointer($970F60) as IValueData, 80, 20048, 39341648, $2584E50, TClass($2584E50), 80, 20048, 39341648, 1,58916483213911e-37, 1,9437356727579e-316, 0,00000000014341e-4933, 39341648, 3934,1648, 39341648, 39341648, ($2584E50, nil), $2584E50)), (($959B14, TValueDataImpl($2463AA4) as IValueData, 0, 0, 0, nil, nil, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (nil, nil), nil))),???,???,False)
System.Rtti.TRttiInstanceProperty.DoSetValue(???,$18FBC8)
System.Rtti.TRttiProperty.SetValue($2584E50,$18FBC8)
:00636fee TRttiPropertyHelper.SetValue + $26
DSharp.ComponentModel.Composition.SpringContainer.TPropertyInjectionWithDelegate.DoInject((($95BBB0, Pointer($970F60) as IValueData, 80, 20048, 39341648, $2584E50, TClass($2584E50), 80, 20048, 39341648, 1,58916483213911e-37, 1,9437356727579e-316, 3,72036854775808e+580, 39341648, 3934,1648, 39341648, 39341648, ($2584E50, nil), $2584E50)),(...))
:007985b1 TInjectionBase.Inject + $71
:007995e6 TReflectionComponentActivator.ExecuteInjections + $7E
:00799501 TReflectionComponentActivator.CreateInstance + $E1
:007bb8a2 TTransientLifetimeManager.GetInstance + $42
:007c86d4 TServiceResolver.DoResolve + $90
:007c8c11 TServiceResolver.Resolve + $151
:007c88a9 TServiceResolver.Resolve + $15
DSharp.ComponentModel.Composition.SpringContainer.TSpringContainer.Resolve($959970,'')
Explorer.{DSharp.PresentationModel.Bootstrapper}TBootstrapper<Interfaces.IMainViewModel>.GetInstance($959970,'')
Explorer.{DSharp.PresentationModel.Bootstrapper}@TBootstrapper`1.Create$553$ActRec<Interfaces.IMainViewModel>.$0$Body($959970,'')
Explorer.Composition.Get<Interfaces.IMainViewModel>('')
Explorer.Composition.Get<Interfaces.IMainViewModel>
Explorer.{DSharp.PresentationModel.Bootstrapper}@TBootstrapper`1.StartRuntime$556$ActRec<Interfaces.IMainViewModel>.$0$Body
Explorer.{DSharp.Core.Lazy}TLazy<Interfaces.IMainViewModel>.Initialize
Explorer.{DSharp.Core.Lazy}TLazy<Interfaces.IMainViewModel>.Invoke
Explorer.{DSharp.Core.Lazy}Lazy<Interfaces.IMainViewModel>.GetValue
Explorer.{DSharp.PresentationModel.Bootstrapper}TBootstrapper<Interfaces.IMainViewModel>.StartRuntime
Explorer.TApplicationVCLHelper.Start<Interfaces.IMainViewModel>
Explorer.Explorer
:766933aa kernel32.BaseThreadInitThunk + 0x12
:77839ef2 ntdll.RtlInitializeExceptionChain + 0x63
:77839ec5 ntdll.RtlInitializeExceptionChain + 0x36
Was in diese Zeile zeigt:
Delphi-Quellcode:
//System.Rtti Zeile 6914
@@skip_push:
// Do call
MOV EAX, [EBX].TParamBlock.RegEAX
MOV EDX, [EBX].TParamBlock.RegEDX
MOV ECX, [EBX].TParamBlock.RegECX
CALL [EBP - 4]
[B]MOV [EBX].TParamBlock.RegEAX, EAX[/B]
MOV [EBX].TParamBlock.RegEDX, EDX
MOVSX EAX, BYTE PTR [EBX].TParamBlock.PopFP
INC EAX
JNZ @@do_fp_pop
NOP
JMP @@done_fp_pop
Am Ende gibts noch Memory Leaks:
Code:
---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:
1 - 12 bytes: TMoveArrayManager<DSharp.Core.MethodIntercept.TMethodIntercept> x 4, Unknown x 3
13 - 20 bytes: TMethodIntercept x 18
21 - 28 bytes: TMethodImplementation x 18, TVirtualInterface.Create$90$ActRec x 3, TInterfaceMethodInterceptor.Proxify$432$ActRec x 4, TWindowManager x 1
29 - 36 bytes: Unknown x 3
37 - 44 bytes: TObjectList<DSharp.Core.MethodIntercept.TMethodIntercept> x 4
53 - 60 bytes: TList<Interfaces.IWorkingAreaViewModel> x 1, TVirtualInterface x 4, TList<DSharp.Core.Validations.IValidationResult> x 3, Unknown x 3
109 - 116 bytes: TWorkingAreaViewModel x 1
117 - 124 bytes: TNavigationViewModel x 1, TMainViewModel x 1
---------------------------
OK
---------------------------
|