看流星社区

 找回密码
 注册账号
查看: 2231|回复: 0

Delphi中Ocx的动态注册方法

[复制链接]

该用户从未签到

发表于 2013-5-2 09:16:19 | 显示全部楼层 |阅读模式
方法1

uses windows;

type
   TDllRegisterServer = function: HResult; stdcall;
  
function RegisterOCX(FileName: string): Boolean;
var
   OCXHand: THandle;
   RegFunc: TDllRegisterServer;
begin
   OCXHand := LoadLibrary(PChar(FileName));
   RegFunc := GetProcAddress(OCXHand, 'DllRegisterServer');
   if @RegFunc <> nil then
     Result := RegFunc = S_OK
   else
     Result := False;
   FreeLibrary(OCXHand);
end;

function UnRegisterOCX(FileName: string): Boolean;
var
   OCXHand: THandle;
   RegFunc: TDllRegisterServer;
begin
   OCXHand := LoadLibrary(PChar(FileName));
   RegFunc := GetProcAddress(OCXHand, 'DllUnregisterServer');
   if @RegFunc <> nil then
     Result := RegFunc = S_OK
   else
     Result := False;
   FreeLibrary(OCXHand);
end;

方法2

procedure TForm1.Button1Click(Sender: TObject);
var
   astr:String;
   bstr:String;
   ProcAddr:Pointer;
   DllAddr:Integer;
begin
   od1.Execute;
   astr:=od1.FileName+chr(0);
   DllAddr:=LoadLibrary(PChar(astr));
   if DllAddr<>0 then
     begin
       bstr:='DllregisterServer'+chr(0);
       //只要将以上处改为DllUnRegisterServer即不注册ActiveX控件
       ProcAddr:=GetProcAddress(DllAddr,PChar(bstr));
       if ProcAddr<>nil then
         CallWindowProc(ProcAddr,DllAddr,0,0,0)
       else
           ShowMessage(od1.FileName+'不是有效的控件');
       FreeLibrary(DllAddr);
     end
   else
       ShowMessage(od1.FileName+'无法装载');
end;



uses OLEctl {, ....};
interface{...}
var  OCXHandle: THandle;
RegFunc: TDllRegisterServer;
begin

OCXHandle:= LoadLibrary('c:\XXX.ocx');

RegFunc := GetProcAddress(OCXHandle, 'DllRegisterServer');

if RegFunc <> 0 then ShowMessage('Error!');

FreeLibrary(OCXHand);

end;

或者

WinExec("regsvr32.exe/s yourocx.ocx",SW_NORMAL);
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-1 03:36

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表