正在阅读:用Delphi制作DLL的方法用Delphi制作DLL的方法

2004-10-18 10:11 出处:CSDN 作者:FlyHope2005 责任编辑:linjixiong

  2)与DLL中的声明一样。
  如: showform(form:Tform);Far;external'yproject_dll.dll';
  3)调用时传过去的参数类型最好也与windows c++一样。
  4)调用时DLL必须在windows搜索路径中,顺序是:当前目录;Path路径;windows;widows\system;windows\ssystem32;

  六 调用动态载入

  1 .建立一种过程类型[如果你对过程类型的变量只是一个指针的本质清楚的话,你就知道是怎么回事了]。如:


  type
  mypointer=procedure(form:Tform);Far;external;
  var
  Hinst:Thandle;
  showform:mypointer;
  begin
  Hinst:=loadlibrary('yproject_dll');//Load一个Dll,按文件名找。
  showform:=getprocaddress(Hinst,'showform');//按函数名找,大小写敏感。如果你知道自动化对象的本质就清楚了。
  showform(application.mainform);//找到函数入口指针就调用。
  Freelibrary(Hinst);
  end;

  七 .在DLL建立一个TForM

  1 把你的Form Uses到Dll中,你的Form用到的关联的单元也要Uses进来[这是最麻烦的一点,因为你的Form或许Uses了许多特殊的单元或函数]
  2 传递一个Application参数,用它建立Form.

  八 .在DLL中建立一个TMDIChildForM

  1 Dll中的MDIForm.FormStyle不用为fmMDIChild.
  2 在CreateForm后写以下两句:


  function ShowForm(mainForm:TForm):integer;stdcall
  var
  Form1: TForm1;
  ptr:PLongInt;
  begin
  ptr:=@(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


察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品