TurboPack / SynEdit

SynEdit is a syntax highlighting edit control, not based on the Windows common controls.
216 stars 72 forks source link

SynEdit component in a DLL project - access violation during finalization of unit SynDWrite.pas #249

Open shmorsecode opened 5 months ago

shmorsecode commented 5 months ago

I'm using SynEdit checked out at commit a0e61b77fcc602c9a1e4754546bc33fcd8a2dadd. Compiler is Delphi 10.2 Tokyo. Access violation happens during System.FinalizeUnits. Here is call stack extract from madExcept 5.1.4:

main thread ($11c0):
7671e4f2 +62 KERNELBASE.dll                                    RaiseException
03fce914 +10 lib_synedit_issue.dll System            37239 +10 @IntfClear
0420eebc +4c lib_synedit_issue.dll SynDWrite           391  +0 TSynDWrite.Destroy@
03fca10a +3e lib_synedit_issue.dll System            22705 +24 FinalizeUnits
04066cf4 +54 lib_synedit_issue.dll madExcept                   InterceptFinalizeUnits
04066d04 +00 lib_synedit_issue.dll madExcept                   InterceptHalt0FinalizeUnits
03fca594 +a8 lib_synedit_issue.dll System            24183 +94 @Halt0
03fd1a16 +46 lib_synedit_issue.dll SysInit            1295 +21 @InitLib
042e7bd7 +0b lib_synedit_issue.dll lib_synedit_issue    41  +0 initialization
77e3cf5e +fe ntdll.dll                                         LdrUnloadDll
76701f40 +10 KERNELBASE.dll                                    FreeLibrary
75e200f7 +17 KERNEL32.DLL                                      BaseThreadInitThunk

I prepared a minimal reproducible example for you, please find it attached below: synedit_issue.zip

Perhaps this is a similar story to what's described on this DevExpress documentation page: DevExpress Components in DLL Projects

pyscripter commented 5 months ago

Call TSynDWrite.Finalize before unloading the DLL.