Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#42

AW: DSharp - Data bindings, MVVM und mehr für Delphi 2010 und höher

  Alt 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  
---------------------------
  Mit Zitat antworten Zitat