Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

我的学习生涯(Delphi篇) - 19

$
0
0

    上篇我们已经编写程序来调用COM,但是还有一点的不便:我们需要手动在“运行”中输入“Regsvr32 xxx”(xxx-COM文件的详细路径),进行COM文件的注册工作。

    那么,能不能编写程序来完成这个工作呢?

    -------------------------------------------------------------------------------------------------美丽分割线---------------------------

   年代:2007

   文件:My0908.7z


   此程序为无界面运行,只进行注册成功的提示。

   主程序文件:

   setupCOM.dpr

program setupCOM;
(*
  COM Register Information
*)

uses
  Windows, SysUtils, Inifiles;

{$R *.RES}

function RegisterOleFile(strOleFileName:String;OleAction:Byte):Boolean;
type
  TOleRegisterFunction = function : HResult;//注册或卸载函数的原型
var
  hLibraryHandle : THandle;
  hFunctionAddress: TFarProc;//DLL或OCX中的函数句柄,由GetProcAddress返回
  RegFunction : TOleRegisterFunction;//注册或卸载函数指针
begin
  //注册 1
  //卸载 0
  Result :=False;
  hLibraryHandle := LoadLibrary(PCHAR(strOleFileName));
  if (hLibraryHandle > 0) then//DLL或OCX句柄正确
  begin
    try
      //返回注册或卸载函数的指针
      if (OleAction = 1) 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);
    end;
  end;

end;

var
  strComFile: String;
  iComType: Integer;
  myIniFile: TIniFile;
begin
  myIniFile := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'setupCOM.ini');
  strComFile := myIniFile.ReadString('reg file', '1', 'F:\mylogs1\printS01.dll');
  iComType := myIniFile.ReadInteger('reg type', 'reg', 1);
  
  if RegisterOleFile(strComFile, iComType)then
    MessageBoxA(0,'Registry setup has been successfully completed!',
                              'COM Registry Setup',$00000000+$00000040)
  else
    MessageBoxA(0,'Registry setup fail!',
                              'COM Registry Setup',$00000000+$00000010);
end.



作者:xiaobin_HLJ80 发表于2013-6-8 3:13:06 原文链接
阅读:118 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>