通过代码动态注册OCX控件

来源:互联网 发布:推塔网络游戏要网络吗 编辑:程序博客网 时间:2024/05/22 07:42
 
1.       在APP初始化中:
if (FAILED(OleInitialize(NULL)))
   {
      AfxMessageBox("OLE initialization failed.Make sure that the OLE libraries are the correct version.") ;
      return FALSE ;
   }
2.在需使用的对话框及程序开头处加入
#ifdef _WIN32
#define LOADLIBRARY_FAILED(x) (x == 0)
#else
#define LOADLIBRARY_FAILED(x) (x <= HINSTANCE_ERROR)
#endif
 
//定义函数地址
STDAPI DllRegisterServer(void) ;
STDAPI DllUnregisterServer(void) ;
typedef HRESULT (STDAPICALLTYPE *CTLREGPROC)();
 
3.       定义注册函数
BOOL CNetMeetDlg::Register(CString strOcx)   //strOcx为需注册的OCX名称
{
              BOOL bResult = FALSE;
              HMODULE hModule = ::LoadLibrary(strOcx) ;
              if (LOADLIBRARY_FAILED(hModule)) return FALSE ;
      
              //获得注册函数地址
              CTLREGPROC DLLRegisterServer =
            (CTLREGPROC)::GetProcAddress(hModule,"DllRegisterServer" ) ;
              if (DLLRegisterServer != NULL)
              {
                     HRESULT regResult = DLLRegisterServer() ;
                     bResult = (regResult == NOERROR) ;
              }
              ::FreeLibrary(hModule) ;
        return bResult;
}
 
4.在需注册的地方加入Register(“name.OCX”);