ActiveX控件进行注册

1、 使用Regsvr32.exe程序对ActiveX控件进行注册 

   对于未注册过的ActiveX控件可以使用此软件对其进行注册,外来ActiveX控件要应用到本身的程序中也必须进行注册。该文件位于Windows目录的system子目录下。使用方法以下:点击“开始”→“运行”;在运行对话框中输入如下命令: 

regsvr32  < 文件名 >        注册一个ActiveX控件
regsvr32  /u  < 文件名 >    解除某ActiveX控件的注册
   咱们使用一些带ActiveX控件的应用程序时,有时会出现不能运行的状况,这有多是其自带ActiveX控件未注册所至,这时不妨使用上述命令一试。另外,VC++使用者若对regsvr32.exe的编码感兴趣的话,可在VC++的联机帮助中找到其源代码。若使用VC++ 6.0,则在MSDN光盘的\sample\VC98\MFC\controls\regsvr中。 
   2、 使用安装程序制做软件:InstallShield 

   使用regsvr32.exe来注册ActiveX控件虽然简单,但须要用户手工注册,在不用时还得手工解除注册,所以,这对一个应用程序来讲并不是好的解决方案。大型应用软件通常都有一个安装程序,在安装程序中解决ActiveX控件注册是较为理想的一种方案。使用InstallShield能够制做出专业级的Setup,还可注册其中的ActiveX控件;并且,在之后携载软件时,自动注销掉之前注册的ActiveX控件。方法以下: 

   1. 启动InstallShield,使用Project Wizard创建一个新的项目; 

   2. 新建一个“File Group”,将须要注册的ActiveX控件文件放入此“File Group”中; 

   3. 将上述“File Group”的“Self-Registered”属性设置成“Yes”。 

   上述步骤仅为制做Setup中设置自动注册ActiveX控件几步,至于使用InstallShield怎样制做一个完整的Setup不在本文讨论范围之中,请读者本身参看有关书籍。 

   3、 在应用程序中加入注册代码 

   对于小型程序不宜采起第二种方法,较好的方法是在程序中嵌入注册代码,实现应用程序自注册。其编程方法是: 

   1. 使用Windows API函数LoadLibrary载入ActiveX控件; 

   2. 使用GetProcAddress函数获取ActiveX控件中注册函数DllRegisterServer(注销函数为DllUnregisterServer)指针; 

   3. 调用注册函数DllRegisterServer(或注销函数DllUnregisterServer)。 

   下面以VC++ 6.0编写的RegActivex程序为例,介绍怎样在程序中自动注册(注销)ActiveX控件。RegActivex的主体框架由VC++ 6.0的AppWizard自动产生,在其基础上增长两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”。当选择“注册ActiveX控件”菜单时,将对控件toweratl.ocx(一个汉诺游戏)进行注册;当选择“注销ActiveX控件”菜单时,将解除控件toweratl.ocx的注册。 

   1. 使用VC++ 6.0创建一个单文档的应用程序RegActivex,其余项目接受默认设置; 

   2. 给应用程序增长两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”,步骤以下: 

   ① 单击VC++ 6.0左边窗口的“ResoureView”,双击MENU项目下的IDR_MAINFRAME以打开菜单编辑器; 

   ② 在菜单编辑器中,加入一个主菜单“注册”,在“注册”主菜单下加入两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”; 

   3. 给新建的菜单项 “注册ActiveX控件” 和“注销ActiveX控件”增长响应函数: 

   ① 在资源编辑其中,双击MENU中的IDR_MAINFRAME打开菜单编辑器,单击“注册ActiveX控件”,按Ctrl+W打开MFC Class Wizard; 

   ② 双击Messages框中的COMMAND,给“注册ActiveX控件”菜单项增长响应函数OnRegisterReg(),单击右边“Edit”按钮给OnRegisterReg()函数增长以下代码: 

void CMainFrame::OnRegisterReg()
  {
  //ActiveX控件的路径及文件名
  LPCTSTR pszDllName="toweratl.ocx";
        //装载ActiveX控件
  HINSTANCE hLib = LoadLibrary(pszDllName);
        if (hLib < (HINSTANCE)HINSTANCE_ERROR)
        {
                MessageBox("不能载入Dll文件!","结果",MB_OK);
                return;
        }
  //获取注册函数DllRegisterServer地址
        FARPROC lpDllEntryPoint; 
        lpDllEntryPoint = GetProcAddress
(hLib,_T("DllRegisterServer"));
        //调用注册函数DllRegisterServer
 if(lpDllEntryPoint!=NULL)
        {
                if(FAILED((*lpDllEntryPoint)()))
                {
MessageBox("调用DllRegisterServer 
失败!","结果",MB_OK);
FreeLibrary(hLib);
return;
                };
MessageBox("注册成功","结果",MB_OK);
        }
        else
MessageBox("调用DllRegisterServer失败!"
,"结果",MB_OK);
}
   ③ “注销ActiveX控件”菜单项响应函数的编写方法同上,代码也类似,只是将 
“lpDllEntryPoint=GetProcAddress
(hLib,_T("DllRegisterServer"));”改为:
        lpDllEntryPoint = GetProcAddress
(hLib,_T("DllUnregisterServer"))。
   4. 编译联接上述程序,便可得一个可执行文件。另需注意的是:应将ActiveX控件文件toweratl.ocx复制到Windows的system目录下。控件文件toweratl.ocx在微软出版的《Visual C++ 6.0程序员指南》所附光盘中能够找到。 
   5. 测试上述程序:运行《Visual C++ 6.0程序员指南》所附光盘中的game2程序,若使用RegActivex注册了toweratl.ocx控件,则该程序能够正常运行;若使用RegActivex注销了toweratl.ocx控件则game2不能运行。程序员

 

LPCTSTR  pszDllName=GetCurPath()+_T("\\system32\\Slide.ocx");
  HINSTANCE hLib = LoadLibrary(pszDllName);        //strSysPath是组件的路径
  if (hLib < (HINSTANCE)HINSTANCE_ERROR)
  {
   acutPrintf(_T("Slide.ocx"));
   return;
  } // get DllRegisterServer address
  FARPROC lpDllEntryPoint;
  lpDllEntryPoint = GetProcAddress(hLib, CW2A(_T("DllRegisterServer"))); // call function of register DllRegisterServer
  if (lpDllEntryPoint != NULL)
  {
   if (FAILED((*lpDllEntryPoint)()))
   {
    acutPrintf(_T("调用DllRegisterServer失败!"));
    FreeLibrary(hLib);
    return;
   }
  }
  else
  {
   acutPrintf(_T("调用DllRegisterServer失败!"));
   return;
  }编程