将窗体资源分装到DLL中并且调用 
用Delphi生成DLL并封装窗体的示例
 调用Dll里面的窗体

DLL文件

library Project2;

{ 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. }

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

{$R
*.res}
exports
    Dll_Showform,
    Dll_CreateForm,
    DLL_GetValue,
    DLL_SetTitle;

begin
end.


unit Unit2;

interface

uses
  Windows, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,
Buttons;

type
  TForm1
= class(TForm)
    Memo1:
TMemo;
    BitBtn1: TBitBtn;
  private
    { Private declarations }
  public
    { Public declarations }

  end;

var
    Form1:
TForm1;
    //Ready for DLl Export
list
    procedure
Dll_Showform();stdcall;
    procedure
Dll_Createform(Left,Top,Width,Height:Integer);stdcall;
    function DLL_GetValue():string;stdcall;
    procedure  DLL_SetTitle(text:string); stdcall;
implementation

{$R
*.dfm}

//无参数
procedure Dll_Showform();stdcall;
var frm:TForm1;
begin
   frm:=TForm1.Create(Application);
   frm.Position:=poMainFormCenter;
   frm.ShowModal;
end;

//带参数
procedure
Dll_Createform(Left,Top,Width,Height:Integer);stdcall;
var frm:TForm1;
begin
   frm:=TForm1.Create(Application);
   frm.Left:=Left;
   frm.Top:=Top;
   frm.Width:=Width;
   frm.Height:=Height;
   frm.BorderStyle:=bsNone;

   frm.ShowModal;
end;

//获得返回值
function
DLL_GetValue():string;stdcall;
var
  frm:TForm1;
begin
   Result:='';
   frm:=TForm1.Create(Application);
   frm.Position:=poMainFormCenter;
   if frm.ShowModal = mrok
then
      Result:=frm.Memo1.Lines.Text;
end;

//回调
procedure  DLL_SetTitle(text:string); stdcall;
var frm:TForm1;
begin
   frm:=TForm1.Create(Application);
   frm.Position:=poMainFormCenter;
   frm.Caption:=text;
   frm.ShowModal;
end;

end.


调用Dll

unit Unit1;

interface

uses
  Windows, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,
  Dialogs,
StdCtrls;
//-------------------------------------------------------------------------------
procedure Dll_Showform();stdcall;external 'project2.dll'; //1无参数
直接调用
procedure
Dll_Createform(Left,Top,Width,Height:Integer);stdcall;external 'project2.dll';//2带参数了
function DLL_GetValue():string;stdcall;external 'project2.dll';//3获得返回值
//-------------------------------------------------------------------------------

type
  TfrmMain1 = class(TForm)
    Button1:
TButton;
    Button2:
TButton;
    Button3:
TButton;
    Memo1:
TMemo;
    Button4:
TButton;
    procedure
Button1Click(Sender: TObject);
    procedure Button2Click(Sender:
TObject);
    procedure
Button3Click(Sender: TObject);
    procedure Button4Click(Sender:
TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain1: TfrmMain1;

implementation

{$R
*.dfm}
//------------------------------------------------------------------------------
procedure TfrmMain1.Button1Click(Sender:
TObject);
begin
    Dll_Showform;
end;
//------------------------------------------------------------------------------
procedure TfrmMain1.Button2Click(Sender:
TObject);
var
     x,y:Integer;
begin
    x:=frmMain1.left+Button2.left+8; //Left
    y:=frmMain1.Top+Button2.Top +Button2.Height+28;      //Top
    Dll_Createform(x,y,400,400);
    //  Dll_Createform(0,0,100,200);
end;
//------------------------------------------------------------------------------
procedure TfrmMain1.Button3Click(Sender:
TObject);
begin
     Memo1.Text:=DLL_GetValue;
end;

//------------------------------------------------------------------------------
type
    TSetCaption = procedure(text:string); stdcall;//4回调
procedure
TfrmMain1.Button4Click(Sender: TObject);
var
    pSetTitle:
TSetCaption;
    h:THandle;
begin
    h:=LoadLibrary(PChar('project2.dll'));
    pSetTitle
:= TSetCaption( GetProcAddress(h, PChar('DLL_SetTitle')) );
    if h = 0 then
Exit;
    if
Assigned(pSetTitle) then
        pSetTitle('Hello
World!');
    FreeLibrary(h);
end;

end.

调用Dll里面的窗体的更多相关文章

  1. Delphi程序调用C#.Net编译的DLL并打开窗体(详解)

    Delphi程序调用C#.Net编译的DLL并打开窗体(详解)最近用C#.Net写了一个公用模块, 本以为仅提供给.Net程序使用, 但是领导要求把这些功能提供给旧系统使用, 天啦, 几套旧系统全是D ...

  2. 学习反射例子,调用DLL窗体及方法

    创建类库,并添加新窗体,加入以下方法 public static string setText(string str) { return str; } 编译后把生成的DLL文件放入新项目的bin目录, ...

  3. 【转】C#调用DLL

    C#中如何调用动态链接库DLL(转)     每种编程语言调用DLL的方法都不尽相同,在此只对用C#调用DLL的方法进行介绍.首先,您需要了解什么是托管,什么是非托管.一般可以认为:非托管代码主要是基 ...

  4. C#程序实现动态调用DLL的研究(转)

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

  5. C#:控制台程序调用中间库创建窗体

    1.类库项目引用System.Windows.Forms并添加引用后,才可创建窗体. 2.控制台应用程序调用中间库(DLL)中的方法创建窗体:中间类库使用反射下的Assembly加载包含窗体的类库及创 ...

  6. delphi 基础之三 编写和调用dll文件

    delphi 编写和调用dll文件   Windows 的执行文件可以划分为两种形式程序和动态连接库 (DLLs).一般程序运行是用.EXE文件,但应用程序有时也可以调用存储在DLL的函数. 在如下几 ...

  7. 【VB技巧】VB静态调用与动态调用dll详解

    本文“[VB技巧]VB静态调用与动态调用dll详解”,来自:Nuclear'Atk 网络安全研究中心,本文地址:http://lcx.cc/?i=489,转载请注明作者及出处! [[请注意]]:在以下 ...

  8. C#程序实现动态调用DLL的研究[转]

    摘   要: 在< csdn 开发高手> 2004 年第 03 期中的<化功大法——将 DLL 嵌入 EXE >一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在 ...

  9. C#程序实现动态调用DLL的研究

    摘 要:在<csdn开发高手>2004年第03期中的<化功大法——将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资 ...

随机推荐

  1. Android-onTouchEvent方法的使用

    手机屏幕事件的处理方法onTouchEvent.该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触摸事件.该方法的签名如下所示. public ...

  2. 【Android】以SimpleAdapter做适配器的ListView和GridView

    SimpleAdapter介绍 SimpleAdapter是一个简单的适配器,可以将静态数据映射到XML文件中定义好的视图. 构造函数 public SimpleAdapter (Context co ...

  3. TOAD FOR MYSQL 进行数据插入时乱码的解决办法---MariaDB 5.5

    最近使用mysql是发现插入的数据乱码,几经周折终于找到的解决方法,特作备忘. 开始有将mysql的字符集全部设置成utf8,如下: SHOW VARIABLES LIKE 'character_se ...

  4. webdriver(python)学习笔记四——定位一组元素

    webdriver可以很方便的使用find_element方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用find_elements方法. 定位一组对象一般用于以下场景: ...

  5. 《Python CookBook2》 第四章 Python技巧 - 若列表中某元素存在则返回之 && 在无须共享引用的条件下创建列表的列表

    若列表中某元素存在则返回之 任务: 你有一个列表L,还有一个索引号i,若i是有效索引时,返回L[i],若不是,则返回默认值v 解决方案: 列表支持双向索引,所以i可以为负数 >>> ...

  6. STM32的JTAG、SWD和串口下载的问题

    最近有一个项目用到STM32,为了使PCB布线方便一些所以改了一些引脚,占用了JTAG接口的PA15和PB3,所以要禁用一下JTAG,下载采用SWD模式.这样在实际操作中做出一些总结(方法网上都有.这 ...

  7. SVM核函数与软间隔

    核函数 在上文中我们已经了解到使用SVM处理线性可分的数据,而对于非线性数据需要引入核函数的概念它通过将数据映射到高维空间来实现线性可分.在线性不可分的情况下,支持向量机通过某种事先选择的非线性映射( ...

  8. Oracle创建用户及表空间 代码片段

    create tablespace testdatalogging datafile 'D:\oracle\oradata\orcl\testdata.dbf' size 50m autoextend ...

  9. 分布式应用框架Akka快速入门

    转自:http://blog.csdn.net/jmppok/article/details/17264495 本文结合网上一些资料,对他们进行整理,摘选和翻译而成,对Akka进行简要的说明.引用资料 ...

  10. 产品经理如何赢得开发人员的尊重和支持?-摘自infoq

    对于产品经理来说,赢得开发人员的尊重和支持,从某种意义上讲,是产品迈向成功的坚实一步.最近,知乎社区上的开发人员和管理者在前.后两个帖子中对此展开了激烈的讨论,其中不乏真知灼见. 林志霖Cray认为产 ...