亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

如何使程序在運行時自動注冊ActiveX控件

2019-11-18 18:29:50
字體:
來源:轉載
供稿:網友
          編寫Delphi應用程序時,經常會遇到一些ActiveX控件[注:擴展名為OCX的控件或DLL的類型庫],它們為應用程序的開發提供了簡單的操作途徑。然而,這些程序在發布的同時,面臨ActiveX控件注冊問題。解決途徑:一、用安裝程序制作打包文件,往往會給增加程序本身的大小,系統重裝時,則必須重新安裝它;二、用程序本身進行代碼編寫函數的形式處理它。
使用方法分為兩種:
一、直接把可視化的ActiveX控件放到程序中;
二、運行時根據需要實時建立。
如果是直接使用,則應用程序在初始化的過程中會自動尋找、創建所需的ActiveX控件,如果控件沒有注冊,初始化程序會產生一個異常,捕捉并處理這個異常。
在程序Form中加入一個新的方法:
unit UAutoRegActiveX;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComObj; //加入ComObj單元

type
  TAutoRegActiveXFrm = class(TForm)
    PRocedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  protected
    { Public declarations }
    procedure CheckException(Sender: TObject; EAbort: Exception);
  end;

var
  AutoRegActiveXFrm: TAutoRegActiveXFrm;

implementation

{$R *.dfm}

{-------------------------------------------------
標準ActiveX控件中,有兩個函數DLLRegisterServer 、DLLUnRegisterServer可調用,
其中函數用于注冊控件,用于卸載控件。我們可用LoadLibrary裝載DLL/OCX文件,用
GetProcAddress獲取DLLRegisterServer和DLLUnRegisterServer兩個函數的指針,然
后再直接運行這兩個函數即可實現注冊和卸載ActiveX控件的操作,從而代替Windows
系統的RegSvr32.exe實現ActiveX控件的注冊和卸載。
--------------------------------------------------}
{-------------------------------------------------
參數說明:
sOleFileName 一個DLL或OCX文件名;
OleAction 表示注冊操作類型:1表示注冊,0表示卸載
返回值:True表示操作執行成功,False表示操作執行失敗
--------------------------------------------------}
function OLERegister(sOleFileName: String; OleAction: Byte):Boolean;
const
  RegisterOle = 1; //注冊
  UnRegisterOle = 0; //卸載
type
  TOleRegisterFunction = function: HResult; //注冊或卸載函數原型
var
  hLibraryHandle: THandle; //由LoadLibray返回的DLL或OCX句柄
  hFunctionAddress: TFarProc; //DLL或OCX中的函數句柄,由GetProAddress返回
  RegFunction: TOleRegisterFunction; //注冊或卸載函數指針
begin
  Result := False;
  //打開文件,返回DLL或OCX句柄
  hLibraryhandle := LoadLibrary(PChar(SOleFileName));
  if (hLibraryHandle > 0) then //DLLakg 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); //關閉已打開的文件
  end;
end;

{ TAutoRegActiveXFrm }

procedure TAutoRegActiveXFrm.CheckException(Sender: TObject;
  EAbort: Exception);
begin
  if EAbort is EOleSysError then
  begin
    if HResult(EOleSysError(EAbort).ErrorCode) = REGDB_E_CLASSNOTREG then
      OleRegister('D:/Flash.ocx',1);
  end
  else
    application.ShowException(EAbort);
end;
//將CheckException方法賦值給系統Application變量,在主Form的OnCreate事件中。
procedure TAutoRegActiveXFrm.FormCreate(Sender: TObject);
var
  DemoOcx: Variant; //變量聲明
begin
  Application.OnException := CheckException;
  //是否產生類名稱字符串錯誤
  try
    DemoOcx := CreateOleObject('Demo.Demo');
  except
    on EAbort:EOleSysError do
    if HResult(EAbort.ErrorCode) = CO_E_CLASSSTRING then
    begin
      if OleRegister('D:/Flash.ocx',1) then
        DemoOcx := CreateOleObject('Demo.Demo')
      else
      begin
        Application.MessageBox('控件注冊失敗,程序將無法正常運行',PChar('注冊控件'),MB_OK+MB_ICONERROR);
        Application.Terminate;
      end;
    end;
  end;
end;

end.


上一篇:QQ尾巴病毒的發送原理分析

下一篇:動態創建ClientDataSet的表定義

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
www.日韩视频| 2023亚洲男人天堂| 精品无人国产偷自产在线| 中文字幕欧美精品在线| 精品福利免费观看| 17婷婷久久www| 欧美丰满少妇xxxxx| 国产精品欧美日韩一区二区| 欧美美女18p| 国产日韩精品在线观看| 一本色道久久综合狠狠躁篇的优点| 一区二区三区日韩在线| 综合网中文字幕| 亚洲欧美中文另类| 亚洲国产一区自拍| 久久久999精品免费| 中文字幕日韩欧美精品在线观看| 日韩美女免费线视频| 蜜臀久久99精品久久久久久宅男| 性色av一区二区咪爱| 久久中文字幕一区| 日本三级韩国三级久久| 国产精品88a∨| 91在线高清视频| 中文字幕欧美日韩va免费视频| 精品久久久久久中文字幕| 日韩最新中文字幕电影免费看| 日韩人体视频一二区| 久久久久久久久爱| 亚洲激情视频在线| 在线观看日韩视频| 97久久伊人激情网| 欧美综合在线观看| 欧美日韩福利电影| 青青久久av北条麻妃黑人| 中文字幕亚洲欧美日韩高清| 日韩电影中文字幕av| 成人免费看黄网站| 欧美日韩成人黄色| 国产视频欧美视频| 欧美日韩国产综合视频在线观看中文| 91超碰caoporn97人人| 日韩欧美成人精品| www.午夜精品| 日本高清不卡在线| 欧美精品电影免费在线观看| 91九色在线视频| 日本一区二区在线播放| 亚洲第一级黄色片| 国产在线播放91| 91人人爽人人爽人人精88v| 97久久久久久| 欧美日韩不卡合集视频| 欧美另类极品videosbestfree| 亚洲一区第一页| 亚洲国产天堂久久国产91| 亚洲女同精品视频| 日韩免费在线电影| 亚洲国产精品一区二区久| 国产精品三级美女白浆呻吟| 国产亚洲精品综合一区91| 91理论片午午论夜理片久久| 最新69国产成人精品视频免费| 国产网站欧美日韩免费精品在线观看| 美女福利视频一区| 日韩av片永久免费网站| 久久久久成人精品| 欧美日韩免费在线| 国产精品嫩草影院一区二区| 欧美性生活大片免费观看网址| 亚洲精品理论电影| 久久精品国产综合| 精品国产乱码久久久久久婷婷| 欧美亚洲视频一区二区| 国产成人欧美在线观看| 欧美高跟鞋交xxxxhd| 人九九综合九九宗合| 91禁外国网站| 亚洲精品综合精品自拍| 成人国产亚洲精品a区天堂华泰| 中文字幕欧美精品在线| 国产啪精品视频网站| 亚洲国产日韩一区| 精品久久久久久中文字幕| 精品国产欧美成人夜夜嗨| 国产免费一区二区三区在线能观看| 中文字幕亚洲激情| 久久综合伊人77777尤物| 亚洲国产一区二区三区在线观看| 国产精品www网站| 91亚洲精品一区| 亚洲无限乱码一二三四麻| 日韩网站免费观看高清| 欧美怡春院一区二区三区| 91视频国产一区| 久久久久中文字幕2018| 91久久精品视频| 亚洲福利小视频| 精品视频在线播放| 日韩av在线不卡| 美女扒开尿口让男人操亚洲视频网站| 国产亚洲欧美日韩精品| 日韩亚洲欧美成人| 91色视频在线观看| 国产999视频| 国a精品视频大全| 久久精品成人一区二区三区| 中文字幕欧美精品日韩中文字幕| 在线一区二区日韩| 88国产精品欧美一区二区三区| 福利视频导航一区| 亚洲美女久久久| 中文字幕精品久久久久| 久久久精品网站| 国产精品网红福利| 久久久久久国产精品| 亚洲精品自拍第一页| 青草青草久热精品视频在线观看| 日本高清不卡在线| 亚洲人成在线观看网站高清| 69久久夜色精品国产69乱青草| 少妇高潮久久77777| 不卡伊人av在线播放| 久久久久国产精品www| 成人免费观看网址| 搡老女人一区二区三区视频tv| 69av成年福利视频| 亚洲一级免费视频| 欧美在线视频免费播放| 久久综合五月天| 日韩欧美精品在线观看| 日韩精品视频免费专区在线播放| 日本精品在线视频| 国产亚洲a∨片在线观看| 精品露脸国产偷人在视频| 欧美美最猛性xxxxxx| 日韩在线观看免费| 成人免费淫片aa视频免费| 亚洲午夜未满十八勿入免费观看全集| 午夜精品福利在线观看| 最近2019中文字幕第三页视频| 亚洲国产精品人久久电影| 亚洲国产精久久久久久| 国产日产亚洲精品| 91精品国产高清久久久久久久久| 亚洲国产精彩中文乱码av在线播放| 日韩精品在线电影| 北条麻妃一区二区在线观看| 夜夜嗨av色综合久久久综合网| 清纯唯美亚洲激情| 国产成人精品优优av| 亚洲精品一区二区三区不| 欧美亚洲午夜视频在线观看| 日韩黄色高清视频| 欧美精品亚州精品| 成人羞羞国产免费| 欧美床上激情在线观看| 欧美极品第一页| 亚洲sss综合天堂久久| 欧美激情小视频| 亚洲国产精品悠悠久久琪琪| 欧美性视频在线| 欧美日韩国产成人高清视频| 欧美成人精品h版在线观看|