动态注册OCX
Delphi中Ocx的動(dòng)態(tài)注冊方法
方法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);轉(zhuǎn)載于:https://www.cnblogs.com/chengxin1982/archive/2009/09/23/1572234.html
總結(jié)
- 上一篇: !Important:CSS中!impo
- 下一篇: Linq 异常“此提供程序只支持对返回实