写一个没有窗体的程序,有其中用下面的方法注册控件
type
TRegisterAction = (raRegister, raUnRegister);
function RegisterOleFile(FileName: String
Action: TRegisterAction): Boolean;
type //注册 OLE/COM 的 Dll/Ocx 组件
TOleRegisterFunction = function(): HResult
//注册或卸载函数的原型
var
hLibHandle: THandle
//由LoadLibrary返回的DLL或OCX句柄
hFuncAddr: TFarProc
//DLL或OCX中的函数句柄,由GetProcAddress返回
RegFunc: TOleRegisterFunction
//注册或卸载函数指针
begin
Result:=False;
hLibHandle:=LoadLibrary(PChar(FileName))
//打开OLE/DCOM文件,返回的DLL或OCX句柄
try
if (hLibHandle>0) then //DLL或OCX句柄正确
begin //返回注册或卸载函数的指针
if Action=raRegister then //返回注册函数的指针
hFuncAddr:=GetProcAddress(hLibHandle,PChar('DllRegisterServer'))
else //返回卸载函数的指针
hFuncAddr:=GetProcAddress(hLibHandle,PChar('DllUnregisterServer'));
if (hFuncAddr<>Nil) then //注册或卸载函数存在
begin
RegFunc:=TOleRegisterFunction(hFuncAddr)
//获取操作函数的指针
if RegFunc()>=0 then //执行注册或卸载操作,返回值>=0表示执行成功
Result:=True;
end;
end;
finally
FreeLibrary(hLibHandle)
//关闭已打开的OLE/DCOM文件
end;
end;