-------------------------------------------------- ------------------------------ http: //tech.sina.com.cn 2000/12/12 11:40 software The World Lin Ling Delphi is the same as the software such as VisualBasic, VisualfoxPro, which belongs to the RAD Tool (Quick Application Development Tool). Suitable for developing 32-bit or 16-bit / 32-bit hybrid applications. The programming used by Delphi is ObjectPascal, which is structured, object-oriented compilation language, high execution efficiency, reusability, easy maintenance, and strong exception processing capability, class package capability. Compared to Delphi, VB cannot compile the program, can only interpret execution, more importantly, Delphi has strong inheritance, Delphi's application can compile the DLL module, but the VB cannot be compiled, can only call C compile DLL. Delphi can not only call the DLL module generated by C , but also the same C program can also call the DLL component generated by Delphi. This interactive call does not have to be repeatedly developed, which greatly reduces the production cycle.
1. Create a DLL with Delphi
Delphi's DLL creation is not complex. Here you introduce you to Delphi's DLL creation method.
1] First create a new DLL project because DLL is compiled separately from the main program called it. If the DLL module has been built in the item called it (Project), it is removed from Project, and a new project is built. Simply select the NewProject item from the File menu, then add the DLL's PAS module file to the project, then the FORM1 that is automatically created is deleted.
2] In the DPR file in the DLL, the Program key is changed to library, which is declared as a dynamic link library, and add the exports statement after the Uses statement, indicating the function name of the DLL.
3] If the DPR file of the main program already has the statement of the DLL form Createform, it will be removed.
4] In the DLL's PAS file, the DLL is added to the DLL function or the declaration, the form, such as:
FunctionName (argment): boolean; export;
This function or process should be added to the form of CREATE and FREE (production and release) methods.
5] Compile the project.
2, DLL call
There are two ways to call the DLL, one is called when the application is loaded, and the other is called when the application is running. First introduce the call of DLL when loading:
(1) Call the DLL when loading
In the PAS file calling the DLL, the DLL function is submitted to the external statement, and the declaration should be located in the Uses statement of the Implementation, the form is as follows:
IMPLEMENTATION
Uses dialogs;
Function name (argment): boolean; far; external'callname ';
......
The string in the quotation marks behind the External keyword is the file name of the DLL. The DLL function can be referenced anywhere in the PAS file later.
The advantage of calling the DLL during loading is faster, and the code can also share the code.
(2) Call DLL at runtime
Another calling method of the DLL is to call at runtime. To call to Windows API functions: loadLibrary, getProcAddress, etc. Mainly used to call DELPHI and other languages, especially C compiled DLLs.
Suppose your DLL includes a function:
FunctionMyfunc (Aparam: Word): String; export; first add a sentence at the program Type type declaration:
Type
TMYFUNC = Function (Aparam: Word): String;
The function of this sentence is like a function pointer declared in C .
Then define the following variables:
VAR
APTR: TFARPROC;
LHND: THANDLE;
String;
Where APTR, LHND two variable declares must have, S is the DLL function return value, depending on the situation.
Add the following statement to the DLL load:
LHND: loadlibrary ('path / DLL file name);
{Such as lhnd: loadlibrary ('c: /aa/bb.dll');
Aptr: = getProcaddress (lhnd, 'myfunc');
The following can call the DLL directly:
S: = TMYFUNC (BPTR) (60); {Fill in the corresponding variable parameter} according to the function
After the call is completed, release the DLL occupied memory with FreeELIBRARY:
Freelibrary (LHND);
The following is given below, and an example of runtime call. This DLL is primarily used to check if the input password is correct, and the form contains an Edit edit box, two buttons Button, a tag Label, enter the password in the edit box. Returns true holiday based on comparison results.
{main.pas main program (runtime call DLL)}
Unit main;
Interface
Uses Wintypes, WinProcs, Classes, Graphics, Forms, Controls, Stdctrls, ExtCtrls
Type
TFORM1 = Class (TFORM)
EDIT1: TEDIT;
Label1: TLABEL;
Button1: tbutton;
Bevel1: TBevel;
Groupbox1: TgroupBox;
STATUSLBL: TLABEL;
Procedure Button1Click (Sender: TOBJECT);
END;
Tgetpass = function (aa: string): boolean;
VAR
FORM1: TFORM1;
GetPass: Tgetpass;
LHND: THANDLE;
APTR: TFARPROC;
IMPLEMENTATION
Uses dialogs;
{$ R * .dfm}
{Import routine from dll.takes password to matchand returns boolean.}
{Function GetPassword (Password: String): Boolean; Far; External'chkpWord ';
{Call Password Check Routine, show status inform1.button1click (sender: TOBJECT);
Begin
if Edit1.Text = '' THEN
Begin
Messagedlg ('EntersamplePasswordfirst', MTInformation, [Mbok], 0);
Edit1.setfocus;
end
Else
Begin
LHND: = LoadLibrary ('chkpword.dll');
Aptr: = getProcaddress (lhnd, 'getpassword');
IF TgetPass (adt1.text).
Statuslbl.caption: = 'verifiedpassword'
Else
Statuslbl.caption: = 'invalid password';
Freelibrary (LHND);
END;
END;
End.
{DLLFORM.PASDLL module}
Unit DLLForm;
Interface
Uses Wintypes, WinProcs, Classes, Graphics, Forms, Controls, Buttons, Sysutils, stdctrls;
Type
TPASSWORDFORM = Class (TFORM)
EDIT1: TEDIT;
Label1: TLABEL;
Bitbtn2: tbitbtn;
Bitbtn1: tbitbtn;
END;
Function getPassword (Password: string): boolean; export;
IMPLEMENTATION
Uses dialogs;
{$ R * .dfm}
Function getPassword (Password: String): Boolean
VAR
Passwordform: tpasswordform;
Begin
Result: = FALSE;
Passwordform: = tpasswordform.create (application);
Try
With PasswordForm Do
If ShowModal = MROK THEN
If Uppercase (Edit1.Text) <> Uppercase (Password) THEN
Messagedlg ('INVALID Password', MtWarning, [Mbok], 0)
Else
RESULT: = true;
Finally
Passwordform.free;
END;
END;
End.