如何用Delphi编写dll文件

[11-20 17:13:35]   来源:http://www.88dzw.com  嵌入式系统   阅读:8374

文章摘要:ptr^:=LongInt(mainForm); //用主调程序的mainForm替换DLL的MainForm。MainForm是特殊的WINDOW,它专门管理//Application中的Forms资源.为什么不直接Application.MainForm := mainForm,因//为Application.MainForm是只读属性Form1:=TForm1.Create(mainForm); //用参数建立end;备注:参数是主调程序的Application.MainFormDelphi中高级DLL的编写和调用根据Delphi提供的有关 DLL编写和调用的帮助信息,

如何用Delphi编写dll文件,标签:嵌入式系统开发,嵌入式开发,http://www.88dzw.com

ptr^:=LongInt(mainForm);         //用主调程序的mainForm替换DLL的MainForm。MainForm是特殊的WINDOW,它专门管理//Application中的Forms资源.为什么不直接Application.MainForm := mainForm,因//为Application.MainForm是只读属性

Form1:=TForm1.Create(mainForm);  //用参数建立

end;

备注:参数是主调程序的Application.MainForm

Delphi中高级DLL的编写和调用

根据Delphi提供的有关 DLL编写和调用的帮助信息,你可以很快完成一般的 DLL编写和调用的 应用程序。本文介绍的主题是如何编写和调用能够传递各种参数(包括对象实例)的 DLL。例如, 主叫程序传递给 DLL一个ADOConnection 对象示例作为参数, DLL中的函数和过程调用通过该对象 实例访问数据库。

  需要明确一些基本概念。对于 DLL,需要在主程序中包含 exports子句,用于向外界提供调用 接口,子句中就是一系列函数或过程的名字。对于主叫方(调用 DLL的应用程序或其它的 DLL), 则需要在调用之前进行外部声明,即external保留字指示的声明。这些是编写 DLL和调用 DLL必须 具备的要素。

  另外需要了解Object Pascal 中有关调用协议的内容。在Object Pascal 中,对于过程和函数 有以下五种调用协议:

  指示字 参数传递顺序 参数清除者 参数是否使用寄存器
  register 自左向右 被调例程 是
  pascal 自左向右 被调例程 否
  cdecl 自右向左 调用者 否
  stdcall 自右向左 被调例程 否
  safecall 自右向左 被调例程 否

  这里的指示字就是在声明函数或过程时附加在例程标题之后的保留字,默认为register,即是 唯一使用 CPU寄存器的参数传递方式,也是传递速度最快的方式;

  pascal: 调用协议仅用于向后兼容,即向旧的版本兼容;
  cdecl: 多用于 C和 C++语言编写的例程,也用于需要由调用者清除参数的例程;
  stdcall: 和safecall主要用于调用Windows API 函数;其中safecall还用于双重接口。
  在本例中,将使用调用协议cdecl ,因为被调用的 DLL中,使用的数据库连接是由主叫方传递 得到的,并且需要由主叫方处理连接的关闭和销毁。

  下面是 DLL完整源程序和主叫程序完整源程序。包括以下四个文件:

   Project1.DPR {主叫程序}
   Unit1.PAS {主叫程序单元}
   Project2.DPR {DLL}
   Unit2.PAS {DLL单元}


  {---------- DLL 主程序 Project2.DPR ----------}

  library Project2;

  uses
   SysUtils,
   Classes,
   Unit2 in ‘Unit2.pas‘ {Form1};

  {$R *.RES}

  { 下面的语句用于向调用该 DLL的程序提供调用接口 }
  exports
   DoTest; { 过程来自单元Unit2 }

  begin
  end.
{---------- DLL中的单元 Unit2.PAS ----------}

  unit Unit2;

  interface

  uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   Db, ADODB, StdCtrls, Menus;

  type
   TForm1 = class(TForm)
   ADOConnection1: TADOConnection;{ 本地数据库连接 }
   Memo1: TMemo; { 用于显示信息 }
   private
   public
   end;

  { 该过程向外提供 }
  procedure DoTest(H: THandle; { 获得调用者的句柄 }
   AConn: TADOConnection;{ 获得调用者的数据库连接 }
   S: string; { 获得一些文本信息 }
   N: Integer); { 获得一些数值信息 }
   cdecl; { 指定调用协议 }

  implementation

  {$R *.DFM}

上一页  [1] [2] [3] [4] [5] [6] [7] [8]  下一页


Tag:嵌入式系统嵌入式系统开发,嵌入式开发嵌入式系统

《如何用Delphi编写dll文件》相关文章