Library Keyword
A library project defines a dynamically linked library (DLL). When Windows loads the library, Delphi first executes the initialization sections of all units. Then Delphi executes the library’s block.
If your library passes strings, dynamic arrays, or
Variant
s as arguments or return values between
modules (the application or other libraries), you must use
ShareMem
as the first unit. See Chapter 2 for details.
If your library allocates memory (such as objects) freed by the
application or another library, or if your library frees objects
allocated by a different module, you must use the
ShareMem
unit.
If you pass object references as arguments or return values between
modules, be aware that the is
and
as
operators will not work correctly. Each module
(program or library) keeps its own copy of every class’s RTTI.
The is
and as
operators rely on
RTTI to test class types, so different RTTI implies different types.
If this is a problem, use packages instead of libraries. Chapter 3 explains RTTI in
detail.
library FontNames;
// Delphi lets you extend the IDE by loading packages or DLLs
// that use the Open Tools API. This rather trivial IDE extension
// must be compiled with the VCL50 runtime package. To install the
// extension, add a registry value under
// HKEY_CURRENT_USERSoftwareBorlandDelphi5.0Experts
// The entry name is a unique string, and the value is the path
// of this DLL.
//
// After compiling this DLL, creating the registry entry, and
// restarting Delphi, open the Object Inspector and choose
// the Font.Name property. Drop down the list of font names
// and watch what happens. If you have a lot of fonts installed,
// this will take a long time. Delete the registry entry and
// restart Delphi to remove the IDE extension.
uses ShareMem, DsgnIntf, ToolsAPI;
function Init(const BorlandIDEServices: IBorlandIDEServices;
RegisterProc: TWizardRegisterProc;
var Terminate: TWizardTerminateProc): Boolean; stdcall;
begin
FontNamePropertyDisplayFontNames := True;
Result := True;
end;
exports Init name WizardEntryPoint;
end.