About the author
If you've encountered unresolved external linking errors while compiling old BCB (eg, BCB6) projects in BCB2006, such as
[Linker Error] Error: Unresolved external '__tpdsc__ System::String' referenced from xxxx.OBJ[Linker Error] Error: Unresolved external '__fastcall Sysutils::AllocMem(unsigned int)' referenced from xxxx.OBJ[Linker Error] Error: Unresolved external '__fastcall Db::TFieldDef::TFieldDef(Db::TFieldDefs *, const System::AnsiString, Db::TFieldType, int, bool, int)' referenced from xxxx.OBJ[Linker Error] Error: Unresolved external '__fastcall Db::TDataSet::Resync(System::Set)' referenced from xxxx.OBJ[Linker Error] Error: Unresolved external 'System::__linkproc__ VarArrayGet(System::Variant&, int, int)' referenced from xxxx.OBJ[Linker Error] Error: Unresolved external 'System::__linkproc__ __fastcall VarClr(System::Variant&)' referenced from xxxxy.OBJ
you're encountering these errors because you're linking in object files compiled with older versions of BCB. The proper way to resolve these errors is to recompile the source files from which these object files are created. However, if you don't have the source files, there's a workaround.
The workaround is created by adding pragma aliases to any existing unit, such as
#pragma alias "@Sysutils@AllocMem$qqrui" = "@System@AllocMem$qqrui"#pragma alias "@System@@VarArrayGet$qr14System@Variantii" = "@Variants@@VarArrayGet$qr8TVarDataipxi"#pragma alias "@System@@VarClr$qqrr14System@Variant" = "@Variants@@VarClr$qqrr8TVarData"#pragma alias "@Db@TFieldDef@$bctr$qqrp13Db@TFieldDefsx17System@AnsiString13Db@TFieldTypeioi" = "@Db@TFieldDef@$bctr$qqrp13Db@TFieldDefsx17System@AnsiString13Db@TFieldTypeioi"#pragma alias "@Db@TDataSet@Resync$qqr36System@%Set$t9Db@DB__06$iuc$0$iuc$1%" = "@Db@TDataSet@Resync$qqr36System@%Set$t9Db@DB__26$iuc$0$iuc$1%"#pragma alias "@$xp$13System@String"="@$xp$13System@string"
Continued discussion of undocumented Delphi 8 Property Access Specifiers, and other ways of adding and removing delegates / events handlers, including clearing the list of all the delegates / event handlers.
This article discusses the new Delphi 8 property access specifiers.
A method pointer is now the same as a global procedure, ie, procedure of object = procedure.