上篇我们已经编写程序来调用COM,但是还有一点的不便:我们需要手动在“运行”中输入“Regsvr32 xxx”(xxx-COM文件的详细路径),进行COM文件的注册工作。
那么,能不能编写程序来完成这个工作呢?
-------------------------------------------------------------------------------------------------美丽分割线---------------------------
年代:2007
文件:My0908.7z
此程序为无界面运行,只进行注册成功的提示。
主程序文件:
setupCOM.dpr
program setupCOM; (* COM Register Information *) uses Windows, SysUtils, Inifiles; {$R *.RES} function RegisterOleFile(strOleFileName:String;OleAction:Byte):Boolean; type TOleRegisterFunction = function : HResult;//注册或卸载函数的原型 var hLibraryHandle : THandle; hFunctionAddress: TFarProc;//DLL或OCX中的函数句柄,由GetProcAddress返回 RegFunction : TOleRegisterFunction;//注册或卸载函数指针 begin //注册 1 //卸载 0 Result :=False; hLibraryHandle := LoadLibrary(PCHAR(strOleFileName)); if (hLibraryHandle > 0) then//DLL或OCX句柄正确 begin try //返回注册或卸载函数的指针 if (OleAction = 1) then//返回注册函数的指针 hFunctionAddress := GetProcAddress(hLibraryHandle, pchar('DllRegisterServer')) else//返回卸载函数的指针 hFunctionAddress := GetProcAddress(hLibraryHandle, pchar('DllUnregisterServer')); if (hFunctionAddress <> NIL) then//注册或卸载函数存在 begin RegFunction := TOleRegisterFunction(hFunctionAddress);//获取操作函数的指针 if RegFunction >= 0 then //执行注册或卸载操作,返回值>=0表示执行成功 result :=True; end; finally FreeLibrary(hLibraryHandle); end; end; end; var strComFile: String; iComType: Integer; myIniFile: TIniFile; begin myIniFile := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'setupCOM.ini'); strComFile := myIniFile.ReadString('reg file', '1', 'F:\mylogs1\printS01.dll'); iComType := myIniFile.ReadInteger('reg type', 'reg', 1); if RegisterOleFile(strComFile, iComType)then MessageBoxA(0,'Registry setup has been successfully completed!', 'COM Registry Setup',$00000000+$00000040) else MessageBoxA(0,'Registry setup fail!', 'COM Registry Setup',$00000000+$00000010); end.
作者:xiaobin_HLJ80 发表于2013-6-8 3:13:06 原文链接
阅读:118 评论:0 查看评论