解决“未能实例化ActiveX控件”的三种方法


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

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

regsvr32  < 文件名 >        注册一个ActiveX控件
regsvr32  /u  < 文件名 >    解除某ActiveX控件的注册

方法二、 使用安装程序制作软件: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不在本文讨论范围之中,请读者自己参看有关书籍。 


方法三、在程序中注册/注销,源码如下:

void RegisterReg(bool flag)  //flag = TRUE 注册  <span style="font-family: Arial, Helvetica, sans-serif;">flag = FALSE 注销</span>
{
    //ActiveX控件的路径及文件名
    LPCTSTR pszDllName="xxx.ocx";
    //装载ActiveX控件
    HINSTANCE hLib = LoadLibrary(pszDllName);
    if (hLib < (HINSTANCE)HINSTANCE_ERROR)
    {
        MessageBox("载入xxx.ocx失败",NULL,MB_OK|MB_ICONERROR);
        return;
    }
    //获取注册函数DllRegisterServer地址
    FARPROC lpDllEntryPoint; 
    if(flag)
        lpDllEntryPoint = GetProcAddress(hLib,"DllRegisterServer");  //注册
    else
        lpDllEntryPoint = GetProcAddress(hLib,"DllUnRegisterServer"); //注销
    //调用注册/注销函数
        if(lpDllEntryPoint != NULL)
        {
            if(FAILED((*lpDllEntryPoint)()))
            {
                //MessageBox("失败!","NULL",MB_OK|MB_ICONERROR);
                FreeLibrary(hLib);
                return;
            }
            //MessageBox("成功!","NULL",MB_OK);
        }
        //else
        //    MessageBox("失败!","NULL",MB_OK|MB_ICONERROR);
}


WIN7使用此程序由于权限原因可能会失败,提示“未能实例化ActiveX控件”,请换用方法一,或新建文本写入“regsvr32  xxx.ocx”保存为“WIN7右键以管理员身份运行此命令.bat”,再以管理员身份运行即可。

你可能感兴趣的:(注册ActiveX控件,未能实例化ActiveX控件)