DELPHI中动态调用dll

2016-02-19 18:47 6 1 收藏

今天图老师小编给大家介绍下DELPHI中动态调用dll,平时喜欢DELPHI中动态调用dll的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - 编程语言 】

 

显式例子:

 ?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

unit Main;

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

interface

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls, Grids, DBGrids, DB, DBTables, DBCtrls;

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

type

  TForm1 = class(TForm)

    Button1: TButton;

    Edit1: TEdit;

    Edit2: TEdit;

    Image1: TImage;

    DataSource1: TDataSource;

    Table1: TTable;

    Table1SpeciesNo: TFloatField;

    Table1Category: TStringField;

    Table1Common_Name: TStringField;

    Table1SpeciesName: TStringField;

    Table1Lengthcm: TFloatField;

    Table1Length_In: TFloatField;

    Table1Notes: TMemoField;

    Table1Graphic: TGraphicField;

    DBGrid1: TDBGrid;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

//  function GetInteger(I:Integer): Integer;stdcall;external 'DLLOne.dll';

//  function GetDouble(F:Double): Double;stdcall;external 'DLLOne.dll';

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  TGetDouble = function (F:Double): Double; stdcall;

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

var

  Form1: TForm1;

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

implementation

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

{$R *.dfm}

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

procedure TForm1.Button1Click(Sender: TObject);

var D: Double;

    DLLHandle: THandle;

    Func: TGetDouble;

begin

  Image1.Picture.Assign(Table1Graphic);

  Table1Graphic.Assign(Image1.Picture);

  Exit;

  DLLHandle := LoadLibrary('DLLOne.dll');

  try

  @Func := GetProcAddress(DLLHandle, 'GetDouble');

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  //Edit1.Text := IntToStr(GetInteger(2));

  //D := GetDouble(2.2);

  if Assigned(@Func) then

  begin

    D := Func(2.2);

    Edit2.Text := FloatToStr(D);

  end;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  finally

  FreeLibrary(DLLHandle);

  end;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

end;

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

end.

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

隐式例子:

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

library DLLOne;

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

uses

  SysUtils,

  Classes;

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

{$R *.res}

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  function GetDoubleExt(F:Double): Double;stdcall;external 'DLLTwo.dll';

  function GetInt(I:Integer): Integer;stdcall;external 'DLLTwo.dll';

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  function GetInteger(I:Integer): Integer;stdcall;

  begin

    Result := GetInt(I);

  end;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  function GetDouble(D:Double): Double;stdcall;

  begin

    Result := GetDoubleExt(D);

  end;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

exports

  GetInteger,

  GetDouble;

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

begin

end.

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

library DLLTwo;

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

{ Important note about DLL memory management: ShareMem must be the

  first unit in your library's USES clause AND your project's (select

  Project-View Source) USES clause if your DLL exports any procedures or

  functions that pass strings as parameters or function results. This

  applies to all strings passed to and from your DLL--even those that

  are nested in records and classes. ShareMem is the interface unit to

  the BORLNDMM.DLL shared memory manager, which must be deployed along

  with your DLL. To avoid using BORLNDMM.DLL, pass string information

  using PChar or ShortString parameters. }

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

uses

  SysUtils,

  Classes;

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

{$R *.res}

  function GetDoubleExt(D:Double):Double ;stdcall;

  begin

    Result := D;

  end;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  function GetInt(I:Integer): Integer;stdcall;

  begin

    Result := I;

  end;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

exports

  GetDoubleExt,

  GetInt;

 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

begin

end.

来源:http://www.tulaoshi.com/n/20160219/1618989.html

延伸阅读
因项目需要,我用Delphi写了一个连接数据库把数据导出到Sql文件的dll,其中使用了TADOQuery组件。 其中只有一个导出方法: function DataExport(path,ini_path: PChar ): integer ;    写完之后,用delphi写了一个test.exe进行测试,发现可以正常使用。 之后便把这个dll交给了同事,让他在PowerBuilder中调用...
标签: Delphi
  在用Delphi 3.0开发软件时,出现了硬件驱动程序(DLL)中的函数和过程不能正常调用的问题,该硬件由英国Schlumberger公司生产,驱动程序用汇编语言编写的。其《编程指南》给出的Microsoft C的示范程序均能正常运行。但运行此软件时现出的错误提示为: Access violation at address ×××××××× in module…… 经仔细分析...
曾经听说过“bpl就是一种特殊的dll”,但是没有想到这句话具有这么大的意义。最近看到有人在属于某个dpk的Unit里面写export语句,觉得非常惊奇。但是遍查delphi的help,与export相关的都是library。今天看了《delphi源代码分析》,才知道上面这句话的含义。因此有下面的推论: 对dll工程来说,exports既可以写在工程文件里面,也可以...
在Delphi中,要调用Chm文件可以通过引用HHctrl.ocx文件的函数HtmlHelpA实现。 不过在这里,我们也可以使用API函数ShellExecute来打开Chm帮助文件。 在网上找到的资料,通常以 ShellExecute(self.Handle,'open','help.chm','', '',SW_SHOW);? 的方式来实现。 但有个不足,就是不能打开指定的帮助页面,所...
标签: Delphi
  在用Delphi30开发软件时,出现了硬件驱动程序 (DLL)中的函数和过程不能正常调用的问题,该硬件由英国Schlumberger公司生产,驱动程序用汇编语言编写的。其《编程指南》给出的 Microsoft C的示范程序均能正常运行。但运行此软件时现出的错误提示为: Access violation at address ×××××××× in module…… 经仔细分析...

经验教程

21

收藏

60
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部