调用DLL窗体-Delphi实例
(一)通过向导DLL Wizard新建一个动态链接库,取名为:DLLPro.dpr。说明:当在DLL工程文件中使用了String类型时,要有 uses ShareMem ,不过建议使用PChar类型。其代码如下: library DLLPro; //编译生成DLLPro.dll文件。 uses
ActiveX,
Forms,
Windows,
SysUtils,
Classes,
DLLUnt in 'DLLUnt.pas'; {$R *.res} var
DllApp:TApplication; //全局变量DLLApp默认初始化,即,DLLApp:=Application. procedure CreateForm1(app:TApplication;parentform: TForm); export;stdcall;
var
Form1: TForm1;
begin
CoInitialize(nil);
try
Application:=app;
Form1:=Tform1.Create(parentform);
form1.MyParentForm:= parentform; //MyParentForm在DLLUnt.pas中定义为公共变量
form1.myparentApplication:=app; //MyParentApplication在DLLUnt.pas中定义为公共变量 Form1.Show;
finally
CoUninitialize;
end;
end; procedure ExitDll(Reason:Integer);
begin
if Reason = DLL_PROCESS_DETACH then // DLL_PROCESS_DETACH值在DLL死亡时执行。
begin
Application:=DllApp;
end;
end; exports
CreateForm1; begin
DllApp:=Application; //该语句可以省略。
DllProc:=@ExitDll; //变量DllProc是SysUtils单元的一个Pointer类型的变量。
end. <===============================================================================> (二)创建DLL(动态链接库)的单元文件,取名为:DLLUnt.pas,该单元文件有与其配套的窗体文件DLLUnt.dfm;有一个ADOConnection1组件,必须定义在TForm1类中,否则编译时出错:Access Violence其部分代码如下: unit DLLUnt; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons,ADODB,DB; type
TForm1 = class(TForm)
Panel0: TPanel;
GroupBox1: TGroupBox;
Panel1: TPanel;
Panel2: TPanel; ……………… CheckBox891: TCheckBox;
Edit1: TEdit;
SpeedButton1: TSpeedButton;
ADOConnection1: TADOConnection;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure SpeedButton1Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
MyParentForm: TForm;
MyParentApplication: TApplication;
end; var
Form1: TForm1; implementation {$R *.dfm} ……………… procedure TForm1.SpeedButton1Click(Sender: TObject);
var
query:TADOquery;
Count,I,RedNum,J,CheckNum:integer;
RedName,LabName:string;
begin
if (edit1.Text='')or(length(edit1.Text)<)or(StrToFloat(edit1.Text)<) then
begin
showmessage('Error');
exit;
end;
query:=Tadoquery.Create(nil);
query.Connection:=ADOConnection1;
query.Close;
query.SQL.Clear;
query.SQL.Add('select * from gyWinNum where Id>='+quotedStr(edit1.Text)+' order by Id ');
query.Open;
Count:=;
CheckNum:=;
while (Not query.Eof)and(Count<) do ……………… end. <===============================================================================> (三)创建项目主窗体的工程文件,取名:MainForm.dpr,其代码如下: program MainPro; //编译生成MainPro.exe文件。 uses
Forms,
MainUnt in 'MainUnt.pas' {MainForm}; {$R *.res} begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end. <================================================================================> (四)创建项目主窗体的单元文件,取名:MainUnt.pas,其代码如下: unit MainUnt; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ADODB; //由于被调文件DLLPro.dll中含义数据集控件,在这里必须要有声明。 type
TMainForm = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end; var
MainForm: TMainForm; implementation
{$R *.dfm} procedure CreateForm1(app: TApplication;parentform: TForm);stdcall; external'DLLPro.dll'; procedure TMainForm.Button1Click(Sender: TObject);
begin
CreateForm1(Application,self);
end; end. <================================================================================> 另外:创建项目主窗体的单元文件,取名:MainUnt.pas,其代码也可以如下: unit MainUnt; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,adodb; type
TMainForm = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;
T_CreateForm1=procedure(app: TApplication;parentform: TForm);stdcall; //定义T_CreateForm1类型 var
MainForm: TMainForm; implementation
{$R *.dfm} procedure TMainForm.Button1Click(Sender: TObject);
var
dllHandle: THandle;
Procaddr: FarProc;
CreateForm1: T_CreateForm1;
begin
dllHandle:=LoadLibrary('DLLPro');
Procaddr:=GetProcAddress(dllHandle,'CreateForm1');
if Procaddr <> nil then
begin
CreateForm1:=procaddr; //过程名,标识它的入口地址,是过程指针。
CreateForm1(Application,self);
end;
end; end. 到此为止,结束。 好文要顶 关注我 收藏该文
调用DLL窗体-Delphi实例的更多相关文章
- 学习反射例子,调用DLL窗体及方法
创建类库,并添加新窗体,加入以下方法 public static string setText(string str) { return str; } 编译后把生成的DLL文件放入新项目的bin目录, ...
- C++ 生成 dll 和调用 dll 的方法实例(转)
1)生成dll 建立两个文件 xxx.h , xxx.cpp xxx.h内容如下: #ifdef BUILD_XXX_DLL#define EXPORT __declspec(dllexport)#e ...
- delphi 基础之三 编写和调用dll文件
delphi 编写和调用dll文件 Windows 的执行文件可以划分为两种形式程序和动态连接库 (DLLs).一般程序运行是用.EXE文件,但应用程序有时也可以调用存储在DLL的函数. 在如下几 ...
- Delphi 动态与静态调用DLL(最好的资料)
摘要:本文阐述了 Windows 环境下动态链接库的概念和特点,对静态调用和动态调用两种调用方式作出了比较,并给出了 Delphi 中应用动态链接库的实例. 一.动态链接库的概念 动态链接库( ...
- 调用Dll里面的窗体
将窗体资源分装到DLL中并且调用 用Delphi生成DLL并封装窗体的示例 调用Dll里面的窗体 DLL文件 library Project2;{ Important note about DLL m ...
- 在Delphi中静态调用DLL
在Delphi中静态调用DLL top 调用一个DLL比写一个DLL要容易一些.首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较.同样的,我们先举一个静态调用的例子. u ...
- ASP 调用dll(VB)及封装dll实例
ASP调用dll及封装dll实例,封装为dll可以提供运行效率,加密代码. 打开VB6,新建ActiveX DLL 2.在工程引用中加入Microsoft Active Server Pages Ob ...
- Delphi调用SQL分页存储过程实例
Delphi调用SQL分页存储过程实例 (-- ::)转载▼ 标签: it 分类: Delphi相关 //-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存 ...
- delphi编写与调用DLL(delphi7下测试通过)
http://blog.sina.com.cn/s/blog_4dbbf76f01000anz.html delphi编写DLL 下面在delphi中编写一个简单的dll,在该dll中只有一个max函 ...
随机推荐
- AppStore企业账号打包发布APP流程详解
一.通过企业账号申请证书 1 Certificate Signing Request (CSR)文件 在Mac系统中进入“钥匙串访问”,选择“钥匙串访问”-“证书助理”-“从证书颁发机构请求证书…”, ...
- UI设计师经常去的五个网站
1.站酷 站酷(ZCOOL),中国人气设计师互动平台.深耕设计领域十年,站酷聚集了470万优秀设计师.摄影师.插画师.艺术家.创意人,设计创意群体中具有较高的影响力与号召力. 2.花瓣 花瓣网, ...
- Aspose.Words给word文档加水印
需求:在一些重要的Word文档需要打印时,添加水印以明出处. 方案:使用Aspose组件给word文档 代码:干货如下 /// <summary> /// Inserts a waterm ...
- fastcgi vc6.0demo
#include <WinSock2.h> #include <stdio.h> #pragma comment(lib, "ws2_32.lib") ty ...
- php服务器---IIS一些问题
配置网上很多博客都介绍过..这里不作详细说明了..将PHP目录(D:\PHP\PHP)下的php.ini-recommended或者php.ini-dist改名为php.ini,并找到extensio ...
- 【Apache】Apache服务的基本概念(二)
Apache服务的基本概念 Apache安装请参照:[Apache]Apache服务的安装(一) 1.端口 apache默认监听TCP协议端口80端口 2.apache服务 apache服务默认会启动 ...
- 【Apache】Apache服务的安装(一)
Apache简介 Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行 ...
- 2018.12.19 codeforces 1092F. Tree with Maximum Cost(换根dp)
传送门 sbsbsb树形dpdpdp题. 题意简述:给出一棵边权为1的树,允许选任意一个点vvv为根,求∑i=1ndist(i,v)∗ai\sum_{i=1}^ndist(i,v)*a_i∑i=1n ...
- IBM X3650 M3/M4的服务器装系统
IBM X3650 M3/M4的服务器一般都有两块以上的硬盘.所以如果没有做RAID,那首先应该做好raid 磁盘阵列.本文装系统的前提是RAID已经做好. 一般安装系统的方式为先在IBM官网下载对应 ...
- UVaLive 4628 Jack's socks (贪心)
题意:给定一个无向图,让你把所有点的和它的任意一个相邻点匹配起来,问你是方案是不是唯一,如果是,则输出方案. 析:贪心,很容易知道,如果一个点的度数是 1,那么它只有一个相邻点,这样的话,我们就可以把 ...