在程式執行時自動註冊ActiveX控制項

2021-04-13 00:25:03 字數 2806 閱讀 6781

編寫delphi應用程式時,經常會遇到一些activex控制項[注:擴充套件名為ocx的控制項或dll的型別庫],它們為應用程式的開發提供了簡單的操作途徑。然而,這些程式在發布的同時,面臨activex控制項註冊問題。

解決途徑:一、用安裝程式製作打包檔案,往往會給增加程式本身的大小,系統重灌時,則必須重新安裝它;二、用程式本身進行**編寫函式的形式處理它。

使用方法分為兩種:

一、直接把視覺化的activex控制項放到程式中;

二、執行時根據需要實時建立。

如果是直接使用,則應用程式在初始化的過程中會自動尋找、建立所需的activex控制項,如果控制項沒有註冊,初始化程式會產生乙個異常,捕捉並處理這個異常。

在程式form中加入乙個新的方法:

unit uautoregactivex;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, comobj; //加入comobj單元

type

tautoregactivexfrm = class(tform)

procedure formcreate(sender: tobject);

private

public

protected

procedure checkexception(sender: tobject; eabort: exception);

end;

varautoregactivexfrm: tautoregactivexfrm;

implementation

function oleregister(solefilename: string; oleaction: byte):boolean;

const

registerole = 1; //註冊

unregisterole = 0; //解除安裝

type

toleregisterfunction = function: hresult; //註冊或解除安裝函式原型

varhlibraryhandle: 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;

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);

endelse

end;

procedure tautoregactivexfrm.formcreate(sender: tobject);

vardemoocx: variant; //變數宣告

begin

//是否產生類名稱字串錯誤

trydemoocx := 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

end;

end;

end;

end;

end. 

如何使程式在執行時自動註冊ActiveX控制項

編寫delphi應用程式時,經常會遇到一些activex控制項 注 擴充套件名為ocx的控制項或dll的型別庫 它們為應用程式的開發提供了簡單的操作途徑。然而,這些程式在發布的同時,面臨activex控制項註冊問題。解決途徑 一 用安裝程式製作打包檔案,往往會給增加程式本身的大小,系統重灌時,則必須...

程式執行時間

要獲得乙個c語言程式的執行時間,常用的方法是呼叫標頭檔案time.h,其中提供了clock 函式,可以捕捉從程式開始執行到clock 被呼叫時所 耗費的時間。這個時間單位是clock tick,即 時鐘打點 同時還有乙個常數clk tck,給出了機器時鐘每秒所走的時鐘打點數。於是為了獲 得乙個函式f...

程式執行時間

時間限制 1000 ms 記憶體限制 32768 kb 長度限制 100 kb 判斷程式 standard 來自 小小 要獲得乙個c語言程式的執行時間,常用的方法是呼叫標頭檔案time.h,其中提供了clock 函式,可以捕捉從程式開始執行到clock 被呼叫時所 耗費的時間。這個時間單位是cloc...