VC++注册,卸载OCX控件,以及判断是否注册

注册OCX控件

BOOL CYourClass::RegistOcx()

{

    HINSTANCE hLib = LoadLibrary("NTGraph.ocx");      //指定要注册的ocx文件的路径及文件名。  

    if (hLib == NULL)   

  {         

  MessageBox("不能载入OCX文件!");          

  return;    

  }

 //获取注册函数DllRegisterServer地址    

  FARPROC lpDllEntryPoint;    

   lpDllEntryPoint = GetProcAddress(hLib,"DllRegisterServer");

 

    //调用注册函数DllRegisterServer    

  if(lpDllEntryPoint!=NULL)    

  {        

    if(FAILED((*lpDllEntryPoint)()))        

    {            

      //MessageBox(Handle,"调用DllRegisterServer失败!","失败ing..",MB_OK);            

       MessageBox("OCX注册失败!");

      FreeLibrary(hLib);

              return;

        };        

  //MessageBox(Handle,"注册成功!","Reg",MB_OK);        

  MessageBox("OCX注册成功!");    

  }    

  else

     MessageBox("OCX注册失败!");        

  //MessageBox(Handle,"调用DllRegisterServer失败!","失败ing..",MB_OK);

}

 

卸载控件

BOOL CYourClass::UnRegistOcx()

{

      HINSTANCE hLib = LoadLibrary("NTGraph.ocx");         

    //指定要注册的ocx文件的路径及文件名。    

    if (hLib==NULL)    

    {        

      //MessageBox(Handle,"不能载入Dll文件!","失败ing..",MB_OK);        

      MessageBox("不能载入OCX文件!");        

      return;    

    }

    

  //获取注册函数DllRegisterServer地址    

  FARPROC lpDllEntryPoint;    

  lpDllEntryPoint = GetProcAddress(hLib,"DllUnregisterServer");//注意这里是DllUnregisterServer。

     //调用注册函数DllRegisterServer    

  if(lpDllEntryPoint!=NULL)    

  {        

    if(((*lpDllEntryPoint)()))        

    {            

    //MessageBox(Handle,"调用DllUnRegisterServer失败!","失败ing..",MB_OK);  

     MessageBox("调用DllUnRegisterServer失败!!!");

    FreeLibrary(hLib);            

    return;

      };        

  //MessageBox(Handle,"注销成功!","Unreg",MB_OK);    

     MessageBox("OCX注销成功!");    

  }    

   else    

  //MessageBox(Handle,"调用DllUnRegisterServer失败!!!","结果",MB_OK);

        MessageBox("OCX调用DllUnRegisterServer失败!!!");

}

 

判断是否注册  

BOOL CYourClass::IsRegistOcx()

{    

  HKEY hKey;        

  BOOL bPresent;        

  TCHAR szPath[_MAX_PATH];        

  DWORD dwRegType;        

  DWORD cbData   =   sizeof   szPath   *   sizeof   TCHAR;    

     if(RegOpenKeyEx(HKEY_CLASSES_ROOT,"ActiveX.ActiveXControl//Clsid",0,KEY_READ,&hKey)!=ERROR_SUCCESS)  

     return false;

    else

        return true;   //ActiveX.ActiveXControl为控件的名称和内部名称   如"NTGRAPH.NTGraphCtrl.1//CLSID"

}

posted @   Max Woods  阅读(629)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2008-11-21 鼠标移动之hook学习
点击右上角即可分享
微信分享提示