delphi怎么写dll( 二 )


showform:=getprocaddress(Hinst,'showform');//按函数名找,大小写敏感 。如果你知道自动化对象的本质就清楚了 。
showform(application.mainform);//找到函数入口指针就调用 。Freelibrary(Hinst);end;七 在DLL建立一个TForM1 把你的Form Uses到Dll中,你的Form用到的关联的单元也要Uses进来[这是最麻烦的一点,因为你的Form或许Uses了许多特殊的单元或函数]2 传递一个Application参数,用它建立Form.八 在DLL中建立一个TMDIChildForM1 Dll中的MDIForm.FormStyle不用为fmMDIChild.2 在CreateForm后写以下两句:function ShowForm(mainForm:TForm):integer;stdcallvar Form1: TForm1; ptr:PLongInt;begin ptr:[email protected](Application.MainForm);//先把dll的MainForm句柄保存起来,也无须释放,只不过是替换一下 ptr^:=LongInt(mainForm);//用主调程序的mainForm替换DLL的MainForm 。
MainForm是特殊的WINDOW,它专门管理Application中的Forms资源.//为什么不直接Application.MainForm := mainForm,因为Application.MainForm是只读属性 Form1:=TForm1.Create(mainForm);//用参数建立end;备注:参数是主调程序的Application.MainForm九 示例:DLL源代码:library Project2;uses SysUtils, Classes, Dialogs, Forms, Unit2 in 'Unit2.pas' {Form2};{$R *.RES}var ccc: Pchar;procedure OpenForm(mainForm:TForm);stdcall;var Form1: TForm1; ptr:PLongInt;begin ptr:[email protected](Application.MainForm); ptr^:=LongInt(mainForm); Form1:=TForm1.Create(mainForm);end;procedure InputCCC(Text: Pchar);stdcall;begin ccc := Text;end;procedure ShowCCC;stdcall;begin ShowMessage(String(ccc));end;exports OpenForm; InputCCC, ShowCCC;beginend.调用方源代码:unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}procedure OpenForm(mainForm:TForm);stdcall;External'project2.dll';procedure ShowCCC;stdcall;External'project2.dll';procedure InputCCC(Text: Pchar);stdcall;External'project2.dll';procedure TForm1.Button1Click(Sender: TObject);var Text: Pchar;begin 。
4.Delphi如何编写dll用以加载指定文件工程不一样,通过开始菜单建立一个dll工程,将其主工程的抬头不是project
而是
library
此dll的工程,其最下方有:
Experts
在下边写上你的函数,如
Experts
dllAbc;
之后,在某个页面实现这个方法就可以了,不过一定要写上调用顺序如stdl标志
procedure TForm1.Button1Click(Sender: TObject);
var
threadID:THandle;
threadID:THandle;
begin
CreateThread(nil, 0, @fun1, nil, 0, threadID);
end;
以上这句话确实被调用了么?可以考虑
procedure TForm1.Button1Click(Sender: TObject);
var
openDialog:TOpenDialog;
begin
ShowMessage('');
openDialog := TOpenDialog.Create(nil);
if openDialog.Execute then
end;
看看
【delphi怎么写dll】end;
5.delphi如何调用DLL所谓的静态调用DLL是指程序加载的时候直接就把需要的DLL全部加载了,一直到程序运行结束才释放这些加载的DLL这个就是所谓的静态加载,动态加载就是需要一个DLL中某个函数的时候加载这个DLL运行完成了这个函数就释放DLL,这个就是动态加载! 你要静态加载DLL就用Delphi自己写一个DLL,并且写一个引出库(*.pas的),然后在你的应用程序中包含这个*.pas就根本不用声明DLL中那些乱七八糟的引出函数,直接用就可以了,如果该DLL不存在,那么整个应用程序将无法使用,但是动态调用DLL就不同了,就算DLL不在,应用程序仍然可以使用 访问DLL库有两种方式,一种是静态引用,另一种是动态引用 。