描述:
把你的ocx放到你的项目文件目录或者和你的exe防到同一目录下,在别的机器上运行你的exe时就会自动注册这个ocx了!
解决方案1:
在Win95/98下,如果你的控件和EXE文件在同一个目录中,或者控件文件放置在System目录中,EXE程序运行时会自动找到所需要的OCX文件并注册。但是这种方法在WinNT下不适用,NT下必须先注册控件才能保证EXE程序的正常运行。另外,这种自动注册有一些毛病,如果机器已经存在一个低版本的控件,自动注册可能会失败。所以,如果你希望自己的程序能够非常好地工作,最好还是制作安装程序,否则可能会有麻烦。
上面给的命令我没用过,但调用命令执行注册,应该是和你手动注册的效果一样.你不妨一试.
必须注册的,手工用regsvr32或者自己写注册:
typedef DWORD(CALLBACK * PREG)(void);
void CRegOCXDlg::OnReg()
{
// TODO: Add your control notification handler code here
TCHAR AppFullPath[_MAX_PATH];
GetModuleFileName(NULL,AppFullPath,_MAX_PATH);
CString m_AppPath;
m_AppPath=AppFullPath;
int iAppPosition;
iAppPosition=m_AppPath.ReverseFind('\\');
m_AppPath=m_AppPath.Mid(0,iAppPosition+1);
char pOCXPath[100];
PREG lpDllEntryPoint;
HINSTANCE hLib;
CString m_OCXFileName;
if(m_OcxList.GetCurSel()==CB_ERR)
{
m_OCXFileName="NULL";
(CButton*)GetDlgItem(IDC_REG)->EnableWindow(FALSE);
}
else
{
m_OcxList.GetLBText(m_OcxList.GetCurSel(),m_OCXFileName);
(CButton*)GetDlgItem(IDC_REG)->EnableWindow(TRUE);
}
if(m_OCXFileName=="NULL")
{
(CButton*)GetDlgItem(IDC_REG)->EnableWindow(FALSE);
}
else
{
sprintf(pOCXPath,"%s%s",m_AppPath,m_OCXFileName);
hLib=LoadLibrary(pOCXPath);
if(hLib)
{
lpDllEntryPoint=(PREG)GetProcAddress(hLib,_T("DllRegisterServer"));
if(lpDllEntryPoint!=NULL)
{
(*lpDllEntryPoint)();
AfxMessageBox("组件注册初始成功!",MB_ICONINFORMATION);
FreeLibrary(hLib);
}
else
{
AfxMessageBox("组件注册初始失败!",MB_ICONINFORMATION);
}
}
}
}