首页 > 代码库 > 调用Dll里面的窗体
调用Dll里面的窗体
将窗体资源分装到DLL中并且调用
用Delphi生成DLL并封装窗体的示例
调用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.
解决方法参考了
http://blog.csdn.net/longmen23/article/details/5488797#javascript
来自为知笔记(Wiz)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。