CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

有关DLL调用的问题

楼主stlyy(砺刀)2003-11-01 15:49:31 在 Delphi / Windows SDK/API 提问

http://expert.csdn.net/Expert/topic/2417/2417397.xml?temp=1.224917E-02 问题点数:0、回复次数:2Top

1 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2003-11-01 15:50:44 得分 0

upTop

2 楼coolfilm(苏飞工作室)回复于 2003-11-05 15:43:58 得分 0

 
   
          现时系统的开发,多数都在几人以上的组合,工合作方式开发,这样也方便系统的快速开发目的。  
  而DLL的方法最为方便。我现整理了我的一些这方面资料,希望能帮助一些有需要的同行。  
   
   
  一.函数过程的写法:  
   
  library   FIRSTDLL;  
   
  uses  
      SysUtils,  
      Classes;  
   
  {$R   *.RES}  
  //   1.定义函数具体过程和输出接口方式  
  //   --------------------------------  
  //   函数   1  
  //   功能:事数据3倍放大函数  
  //   --------------------------------  
  function   PenniesToSoins(SourceResult:Integer):Integer;stdCall;  
  begin  
      if   SourceResult>0   then  
          Result:=SourceResult*3   //结果存放于Result  
      else  
          Result:=SourceResult;  
  end;  
   
  exports    
      PenniesToSoins;   //2.函数输出口定义  
       
  end.  
   
  ==  
  ==  
   
  二.在DLL中创建Form  
  =======================  
  1.一步,创建DLL工程,及加入设置好的Form  
   
  library   MGRPERSN;  
  uses  
      SysUtils,  
      Classes,  
      MGRPERFM   in   'MGRPERFM.pas'   {FormPERSON};//1.Form的代码(与一般的Form一样)  
   
  {$R   *.RES}  
  exports  
        ShowPerSN;//2.函数输出口定义  
  begin  
  end.  
   
  2.   在DLL设定的Form的设置    
  ===========================================  
  unit   MGRPERFM;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      ComCtrls,   ToolWin,   ImgList;  
   
  type  
      TFormPERSON   =   class(TForm)  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  //些处的变量不再用,给其改个地方,如下(改变之一)  
  //var    
  //     FormPERSON:   TFormPERSON;  
   
  {   Declare   the   export   function   宣布Form函数出口}//改变之二  
  function   ShowPerSN(AHandle:   THandle;   ACaption:   String):BOOL;   StdCall;  
   
  implementation  
   
  {$R   *.DFM}  
  //函数据过程定义  
  function   ShowPerSN(AHandle:   THandle;   ACaption:   String):BOOL;  
  var  
      FormPERSON:   TFormPERSON;   //定义窗体类(上面的放到了此处)  
  begin  
      //   Copy   application   handle   to   DLL's   TApplication   object  
      //拷贝应用程式句柄给DLL的应有程式对象  
      Application.Handle   :=   AHandle;  
      FormPERSON   :=   TFormPERSON.Create(Application);//创建控件TForm  
      try  
          FormPERSON.Caption   :=   ACaption;  
          FormPERSON.ShowModal;//显示此Form  
          //   Pass   the   date   back   in   Result  
          Result   :=   False;   //反回成功值  
      finally  
          FormPERSON.Free;  
      end;  
  end;  
   
  三.DLL中函数及窗体的调用  
  ==========================  
  1.调用方法一  
  --------------  
  implementation   //在此的下方写明调用函数的DLL  
   
  {$R   *.DFM}  
  //DLL内函数调用  
  function   PenniesToSoins(SourceResult:Integer):Integer;  
            StdCall   external   'FIRSTDLL.DLL';  
   
  ........  
   
  2.调用方法二  
  ==============  
  type     //在此创建一个函数类  
      //   1   -------------------------------  
      {   First,   define   a   procedural   data   type,   this   should   reflect   the  
          procedure   that   is   exported   from   the   DLL.   }  
      {   Create   a   new   exception   class   to   reflect   a   failed   DLL   load   }  
      TShowPerSN   =   function   (AHandle:   THandle;   ACaption:   String):   BOOL;   StdCall;  
      EDLLLoadError   =   class(Exception);//同时分创建一个出错记录类  
      //   1   -------------------------------  
      TMAINCLTR   =   class(TForm)   //这里不变,系统自动生成  
   
  ......  
   
  procedure   TMAINCLTR.ToolButton1Click(Sender:   TObject);  
  var     //按钮的调用事件:调用过程  
      LibHandle:   THandle;  
      ShowPerSN:   TShowPerSN;  
  begin  
      Application.Title:='人力资源管理系统DLL文件测试程式';  
      {   Attempt   to   load   the   DLL   尝试装入DLL文件}  
      LibHandle   :=   LoadLibrary('MGRPERSN.DLL');  
      try  
          if   LibHandle   =   0   then  
              raise   EDLLLoadError.Create('Unable   to   Load   DLL(无法成功装入MGRPERSN.DLL)');  
          @ShowPerSN   :=   GetProcAddress(LibHandle,   'ShowPerSN');  
          if   not   (@ShowPerSN   =   nil)   then  
              ShowPerSN(Application.Handle,   '人事资料管理')//呼叫出窗体  
          else  
              RaiseLastWin32Error;  
      finally  
          FreeLibrary(LibHandle);   //   Unload   the   DLL.  
      end;  
  end;  
  ==============   END   ==================    
   
     
  Top

相关问题

  • 急!有关DLL调用问题!
  • 有关调用dll的问题?
  • DLL的调用
  • dll的调用?
  • DLL调用
  • 调用DLL
  • 调用DLL
  • DLL调用
  • How 调用DLL ?
  • dll调用!

关键词

  • 函数
  • dll
  • mgrperfm
  • sourceresult
  • 定义
  • sysutils
  • 开发
  • forms
  • result

得分解答快速导航

  • 帖主:stlyy

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo