COM注册

情况1:当我们使用 ATL 编写组件程序,注册不用我们来负责。编译成功后,IDE 会帮我们自动注册;
  情况2:当我们使用 MFC 编写组件程序,由于编译器不知道你写的是否是 COM 组件,所以它不会帮我们自动注册。这个时候,我们可以执行菜单“Tools\Register Control”来注册。
  情况3:当我们写一个具有 COM 功能的 EXE 程序时,注册的方法就是运行一次这个程序;
  情况4:当我们需要使用第三方提供的组件程序时,可以命令行运行“regsvr32.exe 文件名”来注册。顺便说一句,反注册的方法是“regsvr32.exe /u 文件名”;
  情况5:当我们需要在程序中(比如安装程序)需要执行注册,那么:

typedef HRESULT (WINAPI * FREG)();
TCHAR szWorkPath[ MAX_PATH ];

::GetCurrentDirectory( sizeof(szWorkPath), szWorkPath );	// 保存当前进程的工作目录
::SetCurrentDirectory( 组件目录 );	// 切换到组件的目录

HMODULE hDLL = ::LoadLibrary( 组件文件名 );	// 动态装载组件
if(hDLL)
{
	FREG lpfunc = (FREG)::GetProcAddress( hDLL, _T("DllRegisterServer") );	// 取得注册函数指针
	// 如果是反注册,可以取得"DllUnregisterServer"函数指针
	if ( lpfunc )	lpfunc();	// 执行注册。这里为了简单,没有判断返回值
	::FreeLibrary(hDLL);
}

::SetCurrentDirectory(szWorkPath);	// 切换回原先的进程工作目录
  上面的示例,在多数情况下可以简化掉切换工作目录的代码部分。但是,如果这个组件在装载的时候,它需要同时加载一些必须依赖的DLL时,有可能由于它自身程序的 BUG 导致无法正确定位
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值