国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

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

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

2019-11-18 18:06:09
字體:
來源:轉載
供稿:網友
 

編寫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.


上一篇:發掘ListBox的潛力(二):鼠標拖放插入點提示

下一篇:發掘ListBox的潛力(一):自動調整橫向滾動條寬度

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

新聞熱點

疑難解答

圖片精選

網友關注

国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
永久免费av网站| 精品99又大又爽又硬少妇毛片 | 国产免费一级片| 国产在线中文字幕| 国产女人伦码一区二区三区不卡| 国产卡1卡2卡三卡在线| 久草网在线视频| 国产一级片网站| 国产porny蝌蚪视频| 中文字幕av高清| 久久国产精品久久久久久小说| 成人免费一区二区三区视频网站| 国产午夜电影| jizz性欧美| 国产黄色小视频| 国产在线精品一区二区不卡| 国产高清在线观看| 九九99九九精彩| 中文字幕第一页在线| 亚洲久草视频| 国产三级在线看| 依依成人在线| 国产精品扒开做爽爽爽的视频 | www.操.com| 国产福利在线视频| 狠狠操视频网| 欧美高清视频| 四虎网站在线观看| 国产黄在线播放| 最近免费中文字幕在线第一页| 亚洲精品白浆| 在线视频三区| 91高清国产| 国产福利在线视频| 中文字幕日本在线| 精品国产福利一区二区在线| 国产美女视频网站| 国产免费视频在线| 国产乱视频在线观看| 久热久精久品这里在线观看| 在线免费看黄av| 伊人网在线免费观看| 97中文字幕| av手机免费在线观看| 精品极品三级久久久久| 91中文字幕| 亚洲精品自拍区在线观看| 精品国产福利一区二区在线| 精品视频一二区| 一级二级三级在线观看| 91午夜视频| 亚洲大香人伊一本线| 免费在线黄色网址| 午夜视频99| 精品偷拍激情视频在线观看| 亚洲天堂电影在线观看| 日本电影全部在线观看网站视频| 99久久精品免费观看国产| 亚洲图区综合| 国产在线观看av| 国产三区视频在线观看| 在线免费观看黄色片| 狠狠干天天爱| 99re热在线观看| 国产麻豆高清视频在线第一页 | 国产三级在线免费| 天天干天天摸| 国产三级自拍| 久久久久国产精品嫩草影院| 国产二区三区四区| аⅴ成人天堂中文在线| 中文字幕日本在线| 四虎精品视频| 国产精品福利视频一区二区三区| 亚洲图区综合| 国产小视频免费在线观看| 一级二级在线观看| 中文字幕久热在线精品| 久热国产视频| 亚洲视频在线网| 国产精品剧情一区二区三区| 超碰在线国产| 青青国产在线| 中文字幕av在线播放| 国产午夜在线观看| 国产原创精品视频| jlzzjlzz欧美大全| 992tv在线观看在线播放| 久久久久久久久免费视频| 一区二区三区免费视频网站| 午夜在线小视频| 操操操综合网| 在线国产网址| 四虎精品成人a在线观看| 99久久精品免费观看国产| 国产精品美女视频免费观看软件 | 国产午夜精品一区理论片| 成年网站免费入口在线观看| 日本黄在线观看| 男人操女人免费网站| gogogogo高清视频在线| 精品三级久久久久久久电影聊斋| 中文字幕免费在线视频| 国产日韩欧美精品一区二区三区 | 国产精品自拍亚洲| 最新天堂资源在线| 国产欧美日本亚洲精品一4区| 最近中文字幕mv2018在线高清 | 国产亚洲精品拍拍拍拍拍| 九九热视频免费观看| 免费观看久久久久| 成人日韩欧美| 国产黄色小视频| av文字幕在线观看| 免费a级人成a大片在线观看| 久色视频在线观看| 日本中文字幕在线观看| 国产三区视频在线观看| 在线中文字幕资源| 日日夜夜中文字幕| 五月婷婷丁香激情| 国产超级va在线视频| 亚洲天堂电影在线观看| 超碰免费在线| 国产高清在线| 丝袜理论片在线观看| 国产在线黄色片| 国产99re| 高潮白浆视频| 97视频网站| 成人福利视频导航| 中文av在线播放| 午夜视频在线| www.操操操| 国产激情自拍视频| 国产真实伦在线观看| 在线免费观看你懂的| 国产视频xxxx| 大香伊人中文字幕精品| 亚洲国产成人综合| 国产一二三区在线观看| 免费99热在线观看| 亚洲91av| 在线中文字幕视频观看| 国产免费黄网站| 激情视频国产| 免费看ww视频网站入口| 91这里只有精品| 国产三级在线| 自拍亚洲国产| 天天操天天是| 天天av天天爱| 国内精品免费一区二区三区| 欧美精品另类| 麻豆电影传媒二区| 亚洲高清在线免费| 在线观看av资源网| 小说区乱图片区| 亚洲伊人网在线观看| 小说区乱图片区| www.99av| 国产在线观看a视频| 麻豆福利在线观看| 国产免费av高清在线| 中文字幕视频在线| 国产青青视频| 9999在线视频| 中文在线视频观看| 在线视频二区| 欧美精品小视频| 九九热视频免费在线观看| 免费国产阿v视频在线观看| 成人福利视频导航| 国产精品久久久久一区二区国产| 国产一级在线| 99在线免费视频| 波多野结衣中文字幕久久| 免费看的毛片| 国产激情视频一区二区| av免费在线播放| 激情六月丁香| 国产寡妇树林野战在线播放| 一个人看的www免费观看视频| 日本成人a视频| 国产鲁鲁视频在线观看免费 | 免费观看久久久久| 国产午夜三区视频在线| 亚洲妇熟xxxx妇色黄| 中文字幕在线视频观看| av免费网站在线观看| 国产在线观看色| 在线中文视频| 国产小视频在线高清播放| a级在线观看| 国产福利在线| 综合蜜桃精品| 噜噜噜噜噜在线视频| 国产对白叫床清晰在线播放| 麻豆精品免费视频入口| 91久久精品国产性色|