【MFC笔记】 利用程序实现对ActiveX控件的注册与卸载

本文是记录在实际运用中遇到的问题的解决方法,以备之后遇到同样问题有迹可循。

1、判断控件是否注册

HKEY hKey = NULL;

if (RegOpenKeyEx(HKEY_CLASSES_ROOT, "TeeChart.TChart\\Clsid", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
{
	MessageBox(_T("未注册OCX文件!"));
}
else
    MessageBox(_T("已注册OCX文件!"));

其中“TeeChart.TChart”为控件的名称和内部名称,可替换为其它控件名称;控件名称可以在已注册该控件的计算机上打开注册表进行查找。

2、注册控件

BOOL CMyDlg::Loadocx()
{
	HKEY hKey = NULL;
	HINSTANCE hLib;
	FARPROC lpDllEntryPoint;

	if (RegOpenKeyEx(HKEY_CLASSES_ROOT, "TeeChart.TChart\\Clsid", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
	{
		//装载ActiveX控件
		hLib = LoadLibrary("D:\\TeeChart Pro v5 ActiveX Control\\teechart5.ocx");    //控件所在地址
		if (hLib < (HINSTANCE)HINSTANCE_ERROR)
		{
			MessageBox(_T("不能载入OCX文件!"));
			return FALSE;
		}

		//获取注册函数DllRegisterServer地址
		lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer");//注意这里是DllRegisterServer

		//调用注册函数DllRegisterServer注册
		if (lpDllEntryPoint != NULL)
		{
			if (FAILED((*lpDllEntryPoint)()))
			{
				MessageBox(_T("调用DllRegisterServer失败!"));
				FreeLibrary(hLib);
				return FALSE;
			}
			MessageBox(_T("OCX注册成功!"));
			return TRUE;
		}
		else
		{
			MessageBox(_T("OCX注册失败!"));
			return FALSE;
		}

	}
}

3、卸载控件

BOOL CMyDlg::Unloadocx()
{
	HKEY hKey;
	HINSTANCE hLib;
	FARPROC lpDllEntryPoint;

	//卸载的ocx文件
	hLib = LoadLibrary("D:\\TeeChart Pro v5 ActiveX Control\\teechart5.ocx");          //要卸载的ocx文件的路径
	if (hLib == NULL)
	{
		MessageBox("不能载入OCX文件!");
		return FALSE;
	}

	//获取注册函数DllRegisterServer地址
	
	lpDllEntryPoint = GetProcAddress(hLib, "DllUnregisterServer");//注意这里是DllUnregisterServer。

	//调用注册函数DllRegisterServer
	if (lpDllEntryPoint != NULL)
	{
		if (((*lpDllEntryPoint)()))
		{
			MessageBox("调用DllUnRegisterServer失败!");
			FreeLibrary(hLib);
			return FALSE;
		};
		MessageBox("OCX注销成功!");
		return TRUE;

	}
	else
	{
		MessageBox("OCX调用DllUnRegisterServer失败!");
		return FALSE;
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值