在程序运行时自动注册ActiveX控件
http://tech.ddvip.com 2007年03月20日 社区交流
本文详细介绍在程序运行时自动注册ActiveX控件
--------------------------------------------------}
{-------------------------------------------------
参数说明:
sOleFileName一个DLL或OCX文件名;
OleAction表示注册操作类型:1表示注册,0表示卸载
返回值:True表示操作执行成功,False表示操作执行失败
--------------------------------------------------}
functionOLERegister(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//DLLakgOCX句柄正确
try
//返回注册或卸载函数指针
if(OleAction=RegisterOle)then //返回注册函数指针
hFunctionAddress:=GetProcAddress(hLibraryhandle,PChar('DLLRegisterServer'))
else//返回卸载函数指针
hFunctionAddress:=GetProcAddress(hLibraryhandle,PChar('DLLUnRegisterServer'));
if(hFunctionAddress<>nil)then//判断注册或卸载函数是否存在
begin
RegFunction:=TOleRegisterFunction(hFunctionAddress);//获取操作函数的指针
ifRegFunction>=0then //执行注册或卸载操作,返回值>=0表示执行成功
Result:=True;
end;
finally
FreeLibrary(hLibraryHandle);//关闭已打开的文件
end;
end;
{TAutoRegActiveXFrm}
procedureTAutoRegActiveXFrm.CheckException(Sender:TObject;
EAbort:Exception);
begin
ifEAbortisEOleSysErrorthen
begin
ifHResult(EOleSysError(EAbort).ErrorCode)=REGDB_E_CLASSNOTREGthen
OleRegister('D:Flash.ocx',1);
end
else
Application.ShowException(EAbort);
end;
//将CheckException方法赋值给系统Application变量,在主Form的OnCreate事件中。
procedureTAutoRegActiveXFrm.FormCreate(Sender:TObject);
var
DemoOcx:Variant;//变量声明
begin
Application.OnException:=CheckException;
//是否产生类名称字符串错误
try
DemoOcx:=CreateOleObject('Demo.Demo');
except
onEAbort:EOleSysErrordo
ifHResult(EAbort.ErrorCode)=CO_E_CLASSSTRINGthen
begin
ifOleRegister('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.
责编:豆豆技术应用
正在加载评论...