I have an appcrash when i use components with interfaces in the published part. See also Bug 32919. I have now simpilied the problem and isolated from Lazarus itself.
The component is on https://github.com/afriess/LazarusBug0032919 in OITestBasic, together with the testproject shown here.
Somethigs goes wrong , if call free for the Form ( SIGSEGV ). A sencond issue is, i did not see the value of the property ObjectHasInterface in the OI. But i see the value if i click on the Combobox.
My Question:
Did i miss something in the definition of the Components ?
------------ definition components ---------------
type
// define the Interface
ITestInterface = interface
function OnlyDummy: integer;
end;
{ TIntfComp }
TIntfComp = class(TComponent)
private
FObjectHasInterface: ITestInterface;
function GetObjectHasInterface: ITestInterface;
procedure SetObjectHasInterface(AValue: ITestInterface);
published
property ObjectHasInterface: ITestInterface read
GetObjectHasInterface write SetObjectHasInterface;
end; { TCompHasIntf }
TCompHasIntf = class(TComponent, ITestInterface) public
function OnlyDummy: integer;
end;
--------- test programm ------------
DUT := TObjectInspectorDlg.Create(nil);
DUT.Caption:= 'My ObjectInspector';
// create the PropertyEditorHook (the interface to the properties)
ThePropertyEditorHook:=TPropertyEditorHook.Create(DUT);
DUT.PropertyEditorHook:=ThePropertyEditorHook;
// Create components
ATestForm := TForm.Create(nil);
ATestForm.Name:= 'Main';
ATestIntf := TIntfComp.Create(ATestForm); // This componnets
can hold a component with interface
ATestIntf.Name := 'ATestIntf';
ATestHasIntf := TCompHasIntf.Create(ATestForm); // This component
has an Interface
ATestHasIntf.Name:= 'ATestHasIntf';
ATestIntf.ObjectHasInterface := ATestHasIntf;
ATestIntf.GetParentComponent;
ThePropertyEditorHook.LookupRoot:=ATestForm;
PerList:=TPersistentSelectionList.Create;
PerList.Add(ATestForm);
DUT.Selection:=PerList;
PerList.Free;
DUT.Show;.......
if DUT nil then begin
ATestForm.Free; // <----- Appcrash
FreeAndNil(DUT);
end;
----------------------- End ------------------------------------ Stack ------------------------
#0 fpc_intf_decr_ref at :0
#1 fpc_finalize at :0
#2 ?? at :0
#3 SYSTEM_$$_SETVARIANTMANAGER$TVARIANTMANAGER at :0 #4 ?? at :0
#5 DESTROY(0x3aa8868, 0x0) at include\control.inc:5146 #6 DESTROY(0x3aa8868, 0x0) at include\wincontrol.inc:6626 #7 DESTROY(0x3aa8868, 0x0) at include\customcontrol.inc:40 #8 DESTROY(0x3aa8868, 0x0) at include\scrollingwincontrol.inc:316 #9 DESTROY(0x3aa8868, 0x1) at include\customform.inc:212 #10 SYSTEM$_$TOBJECT_$__$$_FREE at :0
#11 FREEUSEDOBJECTS(0x3ad46f8) at uoitest.pas:161
#12 BUFREECLICK(0x3ad46f8, 0x3ad5878) at uoitest.pas:139 #13 CLICK(0x3ad5878) at include\control.inc:2929
#14 CLICK(0x3ad5878) at include\buttoncontrol.inc:55 #15 CLICK(0x3ad5878) at include\buttons.inc:169
#16 WMDEFAULTCLICKED(0x3ad5878, {MSG = 66567, WPARAM = 0, LPARAM = 0, RESULT = 0, WPARAMLO = 0, WPARAMHI = 0, WPARAMFILLER = {}, LPARAMLO = 0, LPARAMHI = 0, LPARAMFILLER = {}, RESULTLO = 0, RESULTHI = 0, RESULTFILLER = {}}) at include\buttoncontrol.inc:21 #17 SYSTEM$_$TOBJECT_$__$$_DISPATCH$formal at :0
#18 ?? at :0
#19 VMT_$STDCTRLS_$$_TBUTTONCONTROL at :0
#20 VMT_$STDCTRLS_$$_TCUSTOMSTATICTEXT$indirect at :0 #21 STDCTRLS$_$TBUTTONCONTROL_$__$$_ISCHECKEDSTORED$$BOOLEAN at :0 #22 WNDPROC(0x3ad5878, {MSG = 66567, WPARAM = 0, LPARAM = 0, RESULT = 0, WPARAMLO = 0, WPARAMHI = 0, WPARAMFILLER = {}, LPARAMLO = 0, LPARAMHI = 0, LPARAMFILLER = {}, RESULTLO = 0, RESULTHI = 0, RESULTFILLER = {}}) at include\wincontrol.inc:5406
#23 DELIVERMESSAGE(0x3ad5878, 0) at lclmessageglue.pas:112 #24 DOWINDOWPROC(0x3b0d780) at win32\win32callback.inc:2534 #25 WINDOWPROC(199064, 273, 22648, 1705918) at win32\win32callback.inc:2696 #26 CUSTOMFORMWNDPROC(199064, 273, 22648, 1705918) at win32\win32wsforms.pp:386
#27 USER32!AddClipboardFormatListener at :0
#28 USER32!EndTask at :0
#29 DEBUGSTART_$WIN32WSFORMS at :0
#30 USER32!EndTask at :0
#31 ?? at :0
#32 USER32!EndTask at :0
#33 DEBUGSTART_$WIN32WSFORMS at :0
#34 USER32!SendMessageW at :0
#35 CreateMappedBitmap at :0
#36 ImageList_GetIconSize at :0
#37 USER32!AddClipboardFormatListener at :0
#38 USER32!EndTask at :0
#39 ImageList_GetIconSize at :0
#40 USER32!EndTask at :0
#41 ?? at :0
#42 USER32!EndTask at :0
#43 ImageList_GetIconSize at :0
#44 USER32!CallWindowProcW at :0
#45 CALLDEFAULTWINDOWPROC(1705918, 514, 0, 1310774) at win32\win32callback.inc:97
#46 DOWINDOWPROC(0x3b0d610) at win32\win32callback.inc:2442 #47 WINDOWPROC(1705918, 514, 0, 1310774) at win32\win32callback.inc:2696 #48 BUTTONWNDPROC(1705918, 514, 0, 1310774) at win32\win32wsstdctrls.pp:1791 #49 USER32!AddClipboardFormatListener at :0
#50 USER32!EndTask at :0
#51
WIN32WSSTDCTRLS$_$TWIN32WSBUTTONCONTROL_$__$$_GETPREFERREDSIZE$TWINCONTROL$LONGINT$LONGINT$BOOLEAN at :0
#52 USER32!EndTask at :0
#53 ?? at :0
#54 USER32!DispatchMessageW at :0
#55 USER32!DispatchMessageW at :0
#56 APPPROCESSMESSAGES(0x3af7fd0) at win32\win32object.inc:407 #57 HANDLEMESSAGE(0x3a98408) at include\application.inc:1276 #58 RUNLOOP(0x3a98408) at include\application.inc:1413 #59 APPRUN(0x3af7fd0, {Proc = {procedure (POINTER)} 0x177ff48, Self = 0x3a98408}) at include\interfacebase.inc:54
#60 RUN(0x3a98408) at include\application.inc:1401 #61 :19
------------------- End Stack ---------------------------
