DLL文件在Delphi的创建及调用

原创 2002年01月14日 09:00:00


主题:DLL文件在Delphi的创建及调用


    现时系统的开发,多数都在几人以上的组合,工合作方式开发,这样也方便系统的快速开发目的。
而DLL的方法最为方便。我现整理了一些这方面资料,希望能帮助一些有需要的同学(记得我刚学时,请人教是一不可想象的事)。

//(Copy source book)

一.函数过程的写法:


library FIRSTDLL;


uses
  SysUtils,
  Classes;


{$R *.RES}
// 1.定义函数具体过程和输出接口方式
// --------------------------------
// 函数 1
// 功能:事数据3倍放大函数
// --------------------------------
function BBnToSSnn(SourceResult:Integer):Integer;stdCall;
begin
  if SourceResult>0 then
    Result:=SourceResult+3 //结果存放于Result
  else
    Result:=SourceResult;
end;


exports 
  BBnToSSnn; //2.函数输出口定义
 
end.


==
==


二.在DLL中创建Form
=======================
1.一步,创建DLL工程,及加入设置好的Form


library MGRPERSN;
uses
  SysUtils,
  Classes,
  MGRPERFM in 'MGRPERFM.pas' {FormPERSON};//1.Form的代码(与一般的Form一样)


{$R *.RES}
exports
   ShowPerSN;//2.函数输出口定义
begin
end.


2. 在DLL设定的Form的设置
===========================================
unit MGRPERFM;


interface


uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, ToolWin, ImgList;


type
  TFormPERSON = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;


//些处的变量不再用,给其改个地方,如下(改变之一)
//var
//  FormPERSON: TFormPERSON;

{宣布Form函数出口}//改变之二
function ShowPerSN(AHandle: THandle; ACaption: String):BOOL; StdCall;


implementation


{$R *.DFM}
//函数据过程定义
function ShowPerSN(AHandle: THandle; ACaption: String):BOOL;
var
  FormPERSON: TFormPERSON; //定义窗体类(上面的放到了此处)
begin
  //拷贝应用程式句柄给DLL的应有程式对象
  Application.Handle := AHandle;
  FormPERSON := TFormPERSON.Create(Application);//创建控件TForm
  try
    FormPERSON.Caption := ACaption;
    FormPERSON.ShowModal;//显示此Form
    Result := False; //反回成功值
  finally
    FormPERSON.Free;
  end;
end;


三.DLL中函数及窗体的调用
==========================
1.调用方法一
--------------
implementation //在此的下方写明调用函数的DLL


{$R *.DFM}
//DLL内函数调用
function BBnToSSnn(SourceResult:Integer):Integer;
     StdCall external 'FIRSTDLL.DLL';


........


2.调用方法二
==============
type  //在此创建一个函数类
  // 1 -------------------------------
  TShowPerSN = function (AHandle: THandle; ACaption: String): BOOL; StdCall;
  EDLLLoadError = class(Exception);//同时分创建一个出错记录类
  // 1 -------------------------------
  TMAINCLTR = class(TForm) //这里不变,系统自动生成


......


procedure TMAINCLTR.ToolButton1Click(Sender: TObject);
var  //按钮的调用事件:调用过程
  LibHandle: THandle;
  ShowPerSN: TShowPerSN;
begin
  Application.Title:='人力资源管理系统DLL文件测试程式';
  { Attempt to load the DLL 尝试装入DLL文件}
  LibHandle := LoadLibrary('MGRPERSN.DLL');
  try
    if LibHandle = 0 then
      raise EDLLLoadError.Create('无法成功装入MGRPERSN.DLL');
    @ShowPerSN := GetProcAddress(LibHandle, 'ShowPerSN');
    if not (@ShowPerSN = nil) then
      ShowPerSN(Application.Handle, '人事资料管理')//呼叫出窗体
    else
      RaiseLastWin32Error;
  finally
    FreeLibrary(LibHandle); // Unload the DLL.
  end;
end;
============== END ==================

C#生成DLL以及Delphi调用

DLL(Dynamic Link Library)文件为动态链接库文件。 delphi 调用C#生成的dll的方法: 首先生成dll。在C#中创建一个类库,然后敲入代码,完成后点击生成。 然后注...
  • w329248452
  • w329248452
  • 2015年11月24日 14:09
  • 1518

VC调用Delphi写的dll的一个问题的处理

      最近做一个项目,往一个Delphi写的系统中加入VC新模块.VC模块需要调用以前Delphi写的权限判别的DLL.该DLL出口函数传的参数是String型.我不清楚该类型对应VC的什么数据...
  • seakingw
  • seakingw
  • 2007年02月03日 12:59
  • 874

Delphi调用DLL中的接口

最近很少上论坛,这几次发现好几个问题都是围绕如何使用DLL中的接口而展开的。 问题描述: 具体问题就是在隐式使用接口变量后,在FreeLibrary执行后,就会出现一个非法访址的错误。 ...
  • yanjinrong
  • yanjinrong
  • 2014年11月02日 10:57
  • 1244

在Delphi中调用C语言编写的DLL

1、 使用Visual C++ 6.0编写和链接DLL打开Visual C++ 6.0集成开发环境,新建一个Win32 Dynamic-Link Library类型的工程CDLL,在工程中新建一个C语...
  • neowang
  • neowang
  • 2004年08月11日 18:53
  • 2477

Delphi中怎么调用vb的DLL

VB直接生成的是ActiveX dll, 经过改造,也能生成标准的Windows DLL。 不知道你说的VB生成的dll是哪一类? 1. 标准的Windows DLL, delphi的例子很多。...
  • km_afei
  • km_afei
  • 2016年12月02日 12:23
  • 335

Delphi调用C++编写的动态链接库dll的方法

首先我们先看一下普通Delphi调用动态链接库dll的方法: {===================静态调用DLL函数===================} //首先声明这个DLL中的...
  • qq_22129035
  • qq_22129035
  • 2015年11月16日 11:48
  • 1575

Delphi7程序调用C#写的DLL解决办法(DLL)

近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题。在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:     编写C#dll的方法都一样,首先在vs2005中创建...
  • zlwzlwzlw
  • zlwzlwzlw
  • 2015年02月10日 10:15
  • 2758

Delphi 编写DLL动态链接库文件的知识和样例

一、DLL动态链接库文件的知识简介:                   Windows的发展要求允许同时运行的几个程序共享一组函数的单一拷贝。动态链接库就是在这种情况下出现的。动态链接库不用重...
  • zang141588761
  • zang141588761
  • 2016年04月26日 10:10
  • 5072

用Delphi制作DLL

一、开使你的第一个DLL专案   1.File->Close all->File->New﹝DLL﹞代码:  //自动产生Code如下   library Project2;   //这有段废话   ...
  • sforiz
  • sforiz
  • 2011年04月18日 22:40
  • 6973

MFC DLL 与 Delphi DLL的互相调用要注意的问题

MFC DLL 与 Delphi DLL的互相调用要注意的问题
  • cay22
  • cay22
  • 2010年06月02日 14:56
  • 3078
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DLL文件在Delphi的创建及调用
举报原因:
原因补充:

(最多只允许输入30个字)