function RegisterOleFile(strOleFileName: string; OleAction: byte): Boolean;
const
RegisterOle = 1; //注册
UnRegisterOle = 0; //卸载
type ToleRegisterFunction = function: HResult; //注册或卸载函数的原型
var
hLibraryHandle: THandle; //由LoadLibrary返回的DLL或OCX句柄
hFunctionAddress: TfarProc;
RegFunction: ToleRegisterFunction; //注册或卸载函数指针
begin
Result := False;
hLibraryHandle := LoadLibrary(PChar(strOleFileName)); //打开Ole/Dcom文件,返回的DLL或OCX句柄
//DLL或OCX句柄正确
if (hLibraryHandle > 0) then 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 Result := True; //执行注册或卸载,返回值>=0表示执行成功
end;
finally
FreeLibrary(hLibraryHandle); //关闭已打开的Ole/Dcom文件
end;
end;