zoukankan      html  css  js  c++  java
  • delphi编写与调用DLL(delphi7下测试通过)

    http://blog.sina.com.cn/s/blog_4dbbf76f01000anz.html

      1 delphi编写DLL
      2 下面在delphi中编写一个简单的dll,在该dll中只有一个max函数,返回2个数中的大数(Delphi 5.0)
      3 1、New->DLL;取名为DLL_0001,编写代码:
      4 library dll_0001;
      5 uses
      6    SysUtils,
      7    Classes;
      8 {$R *.RES}
      9 function max(x,y:integer):integer;stdcall;
     10 begin
     11      if(x>y) then
     12       max :=x
     13       else
     14       max :=y;
     15 end;
     16 exports max;
     17 begin
     18 end.
     19 红色部分为自己编写,这里和普通的delphi函数是一样的,只是在返回值中带个stdcall参数,然后用exports把函数导出
     20 ================================================================================
     21 Delphl调用dll
     22 调用dll分动态调用和静态调用2中,动态调用写起来简单,安全点,动态调用复杂很多,但很灵活;
     23 现在编写一个程序,来调用上面写的dll_0001.dll文件中的max函数
     24 一、new一个Application,在Form中放入2个TEdit、1个TLabek;
     25 二、
     26 1、静态调用
     27 unit Unit1;
     28 interface
     29 uses
     30    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
     31    StdCtrls;
     32 type
     33    TForm1 = class(TForm)
     34      Edit1: TEdit;
     35      Edit2: TEdit;
     36      Label1: TLabel;
     37      procedure Edit2KeyDown(Sender: TObject; var Key: Word;
     38        Shift: TShiftState);
     39    private
     40      { Private declarations }
     41    public
     42      { Public declarations }
     43    end;
     44 var
     45    Form1: TForm1;
     46 implementation
     47 {$R *.DFM}
     48 function max(x,y:integer):integer;stdcall;
     49 external 'dll_0001.dll';
     50 procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
     51    Shift: TShiftState);
     52 begin
     53 if key =vk_return then
     54 label1.Caption :=IntToStr(max(StrToInt(Edit1.text),StrToInt(edit2.text)));
     55 end;
     56 end.
     57 红色代码自己添加,其中external "dll_name"中的dll_name可以是dll的绝对路径,要是该dll文件在你的搜索路径中,可以直接写文件名,但是.dll不能少写
     58 2、动态调用,代码如下;
     59 unit Unit1;
     60 interface
     61 uses
     62    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
     63    StdCtrls;
     64 type
     65    TForm1 = class(TForm)
     66      Edit1: TEdit;
     67      Edit2: TEdit;
     68      Label1: TLabel;
     69      procedure Edit2KeyDown(Sender: TObject; var Key: Word;
     70        Shift: TShiftState);
     71    private
     72      { Private declarations }
     73    public
     74      { Public declarations }
     75    end;
     76 var
     77    Form1: TForm1;
     78 implementation
     79 {$R *.DFM}
     80 procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
     81    Shift: TShiftState);
     82 type
     83 TFunc =function(x,y:integer):integer;stdcall;
     84 var
     85 Th:Thandle;
     86 Tf:TFunc;
     87 Tp:TFarProc;
     88 begin
     89 if key =vk_return then
     90 begin
     91 Th :=LoadLibrary('dll_0001.dll');    {load dll}
     92 if(Th   >0) then
     93 try
     94 Tp :=GetProcAddress(Th,PChar('max'));
     95 if(Tp <>nil) then
     96 begin         { begin 1}
     97 Tf :=TFunc(Tp);
     98 Label1.Caption :=IntToStr(
     99 Tf(StrToInt(Edit1.text),StrToInt(Edit2.text)));
    100 end   { end 1}
    101 else
    102    ShowMessage('function max not found.');
    103 finally
    104 FreeLibrary(Th);
    105 end
    106 else
    107 ShowMessage('dll_0001.dll not exsit.');
    108 
    109 end;
    110 end;
    111 end.
  • 相关阅读:
    [转]Invalid postback or callback argument
    DOS之用变量存储输出
    [转]Invalid character in a Base64 string
    [转]100 个强大的 CSS 制作菜单的教程
    [转]delphi的TList,TStringList,TObjectList
    面试感悟一名3年工作经验的程序员应该具备的技能
    Java编程思想重点笔记(Java开发必看)
    第一大章物理层思维导图
    第一大章1.1概论
    jmeter 正则表达式学习(二)使用实例 非墨
  • 原文地址:https://www.cnblogs.com/westsoft/p/5921564.html
Copyright © 2011-2022 走看看