Delphi compilers with support for the inline directive (starting with Delphi 2005) failed to compile DIContainers *.bpl packages for the Demo and Commercial editions. They generated a “[dcc32 Fatal Error] DIUtils: F2051 Unit DIContainers was compiled with a different version of DIUtils.StrSameIW”. Regular *.exe applications compiled without problems. The DIContainers Source Code also compiled to both *.bpl packages and *.exe applications with no problems.
DI.inc include file. Directly link in DICompilers.inc instead.DI_No_Classes compiler directive.DI_No_Range_Checking compiler directive to DIC_Unsafe.TDIStringTree element type from AnsiString to just String.TDIInterfaceVector with NewDIInterfaceVector and NewDIInterfaceOwnerVector constructor functions (Delphi 6 and later only).TDIItemHandler and TDIKeyHandler reference counting.TDINativeIntList, TDINativeIntTree, TDINativeIntVector.TDINativeUIntList, TDINativeUIntTree, TDINativeUIntVector.TDIUnicodeString2NativeUIntVector.GetDIUnicodeStringObjectOwnerItemHandler did not free objects.TDIVector.TDIInteger3Vector.TDIHash high-performance methods:TDIHash.DeleteByKeyNoPackTDIHash.DeleteByKeyNoFreeNoPackTDIHash.PItemOfKeyBufOrInsertTDIStringList.TDIString2List.TDIStringTree.TDIStringVector.TDIStringCardinalVector.TDIString2Vector.TDIString2CardinalVector.TDIStringHash.TDIVector containers).TDIUnicodeStringVector.LoadNamesFromTextFile and TDIUnicodeString2Vector.LoadValuesFromTextFile, as well as for their respective TDIVector and TDIList classe descendants.TDIObjectHash.ObjectAt property.UnicodeString automatically falls back to WideString.TDIUnicodeStringHash, TDIUnicodeStringList, TDIUnicodeStringTree, TDIUnicodeStringVector.TDIUnicodeStringCardinalList, TDIUnicodeStringCardinalTree, TDIUnicodeStringCardinalVector.TDIUnicodeStringIntegerList, TDIUnicodeStringIntegerTree, TDIUnicodeStringIntegerVector.TDIUnicodeStringObjectList + DIUnicodeStringObjectOwnerList, TDIUnicodeStringObjectTree + DIUnicodeStringObjectTree, TDIUnicodeStringObjectVector + DIUnicodeStringObjectOwnerVector.TDIUnicodeStringPointerList + DIUnicodeStringPointerOwnerList, TDIUnicodeStringPointerTree + DIUnicodeStringPointerTree, TDIUnicodeStringPointerVector + DIUnicodeStringPointerOwnerVector.TDIUnicodeString2List, TDIUnicodeString2Tree, TDIUnicodeString2Vector.TDIUnicodeString2CardinalList, TDIUnicodeString2CardinalTree, TDIUnicodeString2CardinalVector,DIUnicodeStringItemHandler.DIUnicodeStringCardinalItemHandler.DIUnicodeStringIntegerItemHandler.DIUnicodeStringObjectItemHandler + DIUnicodeStringObjectOwnerItemHandler.DIUnicodeStringPointerItemHandler + DIUnicodeStringPointerOwnerItemHandler.DIUnicodeString2ItemHandler.DIUnicodeString2CardinalItemHandler.DIUnicodeStringCIKeyHandler, DIUnicodeStringCSKeyHandler.TDIWideStringPointerList, DIWideStringPointerOwnerList.TDIWideStringPointerTree, DIWideStringPointerTree.TDIWideStringPointerVector, DIWideStringPointerOwnerVector.DIWideStringPointerItemHandler, DIWideStringPointerOwnerItemHandler.DIContainers implementation section. They caused some Delphi versions to issue irritating hints when DIContainers was compiled into a package.TDIHash.Clear did not reset an internal variable which could result in an access violation when adding new items.for Item in Container do iterator syntax.TDIItemHandler's methods.TDIContainer level, now declared as virtual and overridden in descendant classes.