Inside Delphi 2006 (Wordware Delphi Developers Library)

Static loading is the simpler of the two possible ways to load a dynamic link library. Static loading is also known as load-time dynamic linking, because the used DLLs get automatically loaded when the application starts.

To statically load a DLL, you have to copy the routine declaration to the calling application and mark it with the external directive, which tells the compiler that the routine resides in either an object file or a dynamic link library.

When you're importing routines from a dynamic link library, you have to mark the routine with the external directive followed by the name of the DLL that contains the routine's implementation. Here's how you can import the Max3 function from the  FirstLib.dll:

function Max3(Num1, Num2, Num3: Integer): Integer; stdcall; external 'FirstLib.dll';

If you want, you can even rename the routine when importing it. To import a routine by renaming, declare the routine with a different name and specify the original name at the end of the declaration using the name directive:

function Max(Num1, Num2, Num3: Integer): Integer; stdcall; external 'FirstLib.dll' name 'Max3';

You can also import a function from a dynamic link library by creating an import unit and writing the standard routine header in the interface part of the unit and its external implementation in the implementation part of the unit. The following listing shows the entire  FirstLib.dll import unit.

Listing 21-3: The FirstLib.dll import unit

unit FirstLibIntf; interface function Max3(Num1, Num2, Num3: Integer): Integer; stdcall; implementation const FirstLib = 'FirstLib.dll'; { tell the compiler that the implementation of the Max3 function is in the FirstLib.dll } function Max3; external FirstLib; end.

Once you've created the DLL and its import unit, you have to test the DLL to see if the routines work. Since you can't run the DLL, you have to create a test application that will use the DLL. The fastest way to create a test application is to create a project group by adding a new project to the current one. You can do this by right-clicking on the ProjectGroup1 item in the Project Manager and selecting Add New Project, as shown in Figure 21-2.

Figure 21-2: Creating a test application for the DLL

Now that you have the DLL, the import unit, and an empty VCL Forms application (or other) project, you can use the DLL's routines as you would all others — add the import unit to the uses list of the test application and call whichever routine you need (see Listing 21-3). The test application is displayed in Figure 21-3.

Listing 21-3: Testing the Max3 routine imported from the FirstLib.dll

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XPMan, FirstLibIntf; type TMainForm = class(TForm) procedure Max3ButtonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.dfm} procedure TMainForm.Max3ButtonClick(Sender: TObject); var LargestNumber: Integer; begin LargestNumber := Max3(StrToInt(Edit1.Text), StrToInt(Edit2.Text), StrToInt(Edit3.Text)); MessageDlg(Format('The largest number is %d.', [LargestNumber]), mtInformation, [mbOK], 0); end; end.

Figure 21-3: The FirstLib.dll test application

Категории