在DELPHI程序中注册OLE/COM控件

在DELPHI程序中注册OLE/COM控件   
    在用DELPHI编写程序时,充分利用他人的成果无疑是一条捷径。我们用的控件有的是带源码   
  的PAS文件,有的是DCU/OBJ文件;而OLE/COM控件也是不可缺少的,由于OLE/COM   
  控件不仅可以由DELPHI开发,还可由VB、VC、PB等其它编程语言开发,因而它可以使我们的   
  DELPHI应用程序功能更为强大,例如用一个MP3播放控件我们就可以编写自己的MP3播放程序,   
  用ADO对象我们的数据库程序就可能不再依赖BDE。   
    不过OLE/COM控件是需要首先注册才能使用的。通常使用OLE/COM控件,首先需要用   
  WINDOWS自己提供的注册程序RegSvr32.EXE来注册或卸载,如“RegSvr32.EXE   Mp3Play.OCX”或   
  “RegSvr32.EXE   Mp3Play.OCX   /u”。不过如果要求我们的软件用户自己来注册OLE/COM控件,那   
  可不是一个好主意,因为我们完全可以自己在程序中注册OLE/COM控件的。下面将讨论如何在   
  DELPHI程序中注册最为常见的DLL/OCX类型的OLE/COM控件。   
    
  一、注册OLE/COM控件的原理   
    在标准OLE/COM控件中,有两个函数DllRegisterServer、DllUnregisterServer可调用,其中   
  DllRegisterServer函数用于注册OLE/COM控件,DllUnregisterServer用于卸载OLE/COM   
  控件,两个函数的原型均为:function   :   HResult。我们可用LoadLibrary装载DLL/OCX文件,   
  用GetProcAddress获取DllRegisterServer和DllUnregisterServer两个函数的指针,然后再直接运行这   
  两个函数即可实现注册和卸载OLE/COM控件的操作,从而代替WINDOWS系统的RegSvr32.exe   
  实现OLE/COM控件的注册和卸载。   
    
  二、实现过程   
    上面的原理很简单,实现起来也就不难了,前提是必须熟悉动态加载DLL函数的过程。具体的实现   
  过程我们可以通过下面的程序代码及注释来理解。   
  {   注册一个DLL形式或OCX形式的OLE/COM控件   
      参数strOleFileName为一个DLL或OCX文件名,   
      参数OleAction表示注册操作类型,1表示注册,0表示卸载   
      返回值True表示操作执行成功,False表示操作执行失败   
  }   
  function   RegisterOleFile   (strOleFileName   :   STRING;   OleAction   :   Byte   )   :   BOOLEAN;   
  const   
            RegisterOle   =   1;//注册   
            UnRegisterOle   =   0;//卸载   
  type   
      TOleRegisterFunction   =   function   :   HResult;//注册或卸载函数的原型   
  var   
      hLibraryHandle   :   THandle;//由LoadLibrary返回的DLL或OCX句柄   
      hFunctionAddress:   TFarProc;//DLL或OCX中的函数句柄,由GetProcAddress返回   
      RegFunction   :   TOleRegisterFunction;//注册或卸载函数指针   
  begin   
      Result   :=   FALSE;   
      //打开OLE/DCOM文件,返回的DLL或OCX句柄   
      hLibraryHandle   :=   LoadLibrary(PCHAR(strOleFileName));   
      if   (hLibraryHandle   >   0)   then//DLL或OCX句柄正确   
              try   
                  //返回注册或卸载函数的指针   
                  if   (OleAction   =   RegisterOle)   then//返回注册函数的指针   
                      hFunctionAddress   :=   GetProcAddress(hLibraryHandle,   pchar('DllRegisterServer'))   
                  else//返回卸载函数的指针   
                      hFunctionAddress   :=   GetProcAddress(hLibraryHandle,   pchar('DllUnregisterServer'));   
                  if   (hFunctionAddress   <>   NIL)   then//注册或卸载函数存在   
                        begin   
                                  RegFunction   :=   TOleRegisterFunction(hFunctionAddress);//获取操作函数的指针   
                                  if   RegFunction   >=   0   then   //执行注册或卸载操作,返回值>=0表示执行成功   
                                        result   :=   true;   
                        end;   
              finally   
                  FreeLibrary(hLibraryHandle);//关闭已打开的OLE/DCOM文件   
              end;   
  end;   
    
  三、应用举例   
    在我们的应用例子中,OpenDialog1(TOpenDialog)用于选择一个DLL/COM文件,editOleFileName   
  (TEdit)用于保存DLL/COM文件名称,radiogroupOleAction(TRadioGroup)用于选择操作类型(0-卸载、   
  1-注册),memo1(TMemo)用来显示操作成功或失败的信息。具体的例子还是看程序源码吧。   
    
  //选择一个DLL/COM文件   
  procedure   TForm1.Button2Click(Sender:   TObject);   
  begin   
            if   OpenDialog1.execute   then   //指定一个DLL/COM文件   
                  editOleFileName.text   :=   OpenDialog1.FileName   ;   
  end;   
    
  //注册一个DLL形式或OCX形式的OLE/COM控件   
  procedure   TForm1.Button1Click(Sender:   TObject);   
  begin   
            if   editOleFileName.text   =   ''   then   exit;//没有指定文件名则不予处理   
            if   RegisterOleFile(   editOleFileName.text,   radiogroupOleAction.ItemIndex   )   
            then//操作成功   
                    memo1.lines.add(   DatetimeToStr(   now   )     +   '----'+   editOleFileName.text   
                        +   radiogroupOleAction.Items[   radiogroupOleAction.ItemIndex   ]   +   '成功!'   )   
            else//操作失败   
                    memo1.lines.add(   DatetimeToStr(   now   )     +   '----'+   editOleFileName.text   
                        +   radiogroupOleAction.Items[   radiogroupOleAction.ItemIndex   ]   +   '失败!'   );   
  end;   
    
    把注册OLE/COM控件功能作成一个OLE/COM或一般的DLL供其它程序调用,可   
  以使其它应用程序也具有注册OLE/COM控件的功能。   
    以上程序在PWIN98+DELPHI3.0下调试通过。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Delphi 中,可以使用 ADO 驱动程序来连接和读取 Excel 数据。以下是读取 Excel 数据的详细操作步骤: 1. 首先,需要添加 ADO 组件。在 Delphi 中,选择“组件”菜单,然后选择“导入组件”。在“导入组件”对话框中,选择“ADO”并点击“确定”按钮。 2. 在 Delphi 中,选择“文件”菜单,然后选择“新建” > “其他” > “数据件” > “ADO 连接”来创建一个 ADO 连接组件。 3. 双击 ADO 连接组件,打开“连接字符串”属性。在连接字符串中,选择 Excel 驱动程序并指定 Excel 文件所在的路径和文件名。例如,“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyExcelFile.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES;'”。 4. 创建一个 ADO 查询组件,它将使用 ADO 连接组件来连接 Excel 数据。 5. 在 ADO 查询组件中,设置“SQL”属性为“SELECT * FROM [Sheet1$]”,其中“Sheet1”是 Excel 文件中的工作表名称。 6. 使用 ADO 查询组件的“Open”方法来打开查询结果集。 7. 使用 ADO 查询组件的“FieldByName”方法来访问每个字段的值。例如,对于包含“Name”和“Age”字段的 Excel 表格,可以使用以下代码来读取每一行: ``` while not Query1.EOF do begin Name := Query1.FieldByName('Name').AsString; Age := Query1.FieldByName('Age').AsInteger; // 处理数据... Query1.Next; end; ``` 以上就是在 Delphi 中读取 Excel 数据的详细操作步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值