请问注册控件

wanguanquan 2003-09-12 12:07:46
程序里用到了第三方控件,做安装程序时需要注册,我用的是setup factory6
制作安装程序,请问怎样在它里面注册第三方控件阿(第三方控件为datawidget3.11,
也即ssoledbcomb控件)
...全文
152 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
flinming 2003-09-13
  • 打赏
  • 举报
回复
regsvr32.exe ....
gzshd 2003-09-13
  • 打赏
  • 举报
回复
你可以让你程序来注册,如下:
首先在初始化时加入:
OleInitialize(NULL);
而在OnDestroy()里加入:
OleUninitalize();
在注册的文件前加:
#ifdef _WIN32
#define LOADLIBRARY_FAILED(x) (x == 0)
#else
#define LOADLIBRARY_FAILED(x) (x <= HINSTANCE_ERROR)
#endif


//检查控件是否支持注册
BOOL CRegisterOcxDlg::SupportsSelfRegister(CString strOcxPath)
{
BOOL bResult = FALSE;
DWORD handle;
UINT uiInfoSize;
UINT uiVerSize ;
UINT uiSize ;
BYTE* pbData = NULL ;
DWORD* lpBuffer;;
char szName[512] ;

//获得文件大小信息
uiInfoSize =
::GetFileVersionInfoSize(strOcxPath.GetBuffer(0),
&handle);
if (uiInfoSize == 0) return FALSE ;

pbData = new BYTE[uiInfoSize] ;

//获得文件信息
bResult =
::GetFileVersionInfo(strOcxPath.GetBuffer(0),
handle,
uiInfoSize,
pbData);
if (!bResult) goto NastyGoto ;

//在注册表中找
bResult =
::VerQueryValue( pbData,
"\\VarFileInfo\\Translation",
(void**)&lpBuffer,
&uiVerSize);
if (!bResult) goto NastyGoto ;

bResult = uiVerSize ;
if (!bResult) goto NastyGoto ;

// Build the path to the OLESelfRegister key
// using the translation information.
sprintf( szName,
"\\StringFileInfo\\%04hX%04hX\\OLESelfRegister",
LOWORD(*lpBuffer),
HIWORD(*lpBuffer)) ;

// Search for the key.
bResult = ::VerQueryValue( pbData,
szName,
(void**)&lpBuffer,
&uiSize);

NastyGoto:
delete [] pbData ;
return bResult ;
}

//注册控件
BOOL CRegisterOcxDlg::Register(CString strOcxPath)
{
BOOL bResult = FALSE ;
//检查是否支持注册
if (SupportsSelfRegister(strOcxPath))
{
HMODULE hModule = ::LoadLibrary(strOcxPath) ;
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 ;

}

//卸载控件
BOOL CRegisterOcxDlg::UnRegister(CString strOcxPath)
{
BOOL bResult = FALSE ;
//检查是否支持注册
if (SupportsSelfRegister(strOcxPath))
{
HMODULE hModule = ::LoadLibrary(strOcxPath) ;
if (LOADLIBRARY_FAILED(hModule)) return FALSE ;

//获得卸载函数地址
CTLREGPROC DLLUnregisterServer =
(CTLREGPROC)::GetProcAddress( hModule,
"DllUnregisterServer" ) ;
if (DLLUnregisterServer != NULL)
{
HRESULT regResult = DLLUnregisterServer() ;
bResult = (regResult == NOERROR) ;
}
::FreeLibrary(hModule) ;
}
return bResult ;

}
warmchang 2003-09-13
  • 打赏
  • 举报
回复
直接选中datawidget3.11,在属性里面设置自注册!
warmchang 2003-09-13
  • 打赏
  • 举报
回复
直接选中datawidget3.11,在属性里面设置自注册!
忠向 2003-09-13
  • 打赏
  • 举报
回复
用regsvr32.exe不好,各个版本的windows这个文件都不一样,有时候他会报告错误,其实根本没有注册成功,它却提示完成!还是作在安装程序中。
楼主的问题可以看看setupfactory的文档呀!
Oversense 2003-09-12
  • 打赏
  • 举报
回复
直接在属性里面选者注册就可以了
linxi075 2003-09-12
  • 打赏
  • 举报
回复
InstallShell里面有个分支,将要注册的文件放入即可。
其他安装程序的应该也有累世的分之
yushulei 2003-09-12
  • 打赏
  • 举报
回复
up

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧