Создавая элементы ActiveX рано или поздно станет вопрос о том как переносить эти компоненты на другой компьютер. Действительно собрав и скомпилировав элемент на своем компьютере мы автоматически его регистрируем. Есть два варианта. Первый - это создать REG файл и при переносе компонента вносить данные в реестр используя этот файл. Второй способ основан на том, что элемент ActiveX умеет сам себя регистрировать используя утилиту RegSrv32.exe. С ее помощью регистрируется элемент и удаляются сведения о регистрации очень просто.
Регистрация:
regsrv32 путь\имя_файла_елемента
Отмена регистрации:
regsrv32 /u путь\имя_файла_елемента
Как это происходит ??? В элементе есть функция DllRegisterServer, которая и умеет регистрировать Ваш элемент. RegSrv32 вызывает эту функцию. Вы можете сами написать процедуру регистрации элемента. Алгоритм такой:
А вот пример кода без обработок ошибок.
HINSTANCE hLib = LoadLibrary("My.Dll");
(FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, _T("DllRegisterServer"));
(*lpDllEntryPoint)();
Что представляет функция DllRegisterServer в элементе ActiveX ? Вот она:
////////////////////////////////////////////////
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);
if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
return ResultFromScode(SELFREG_E_CLASS);
return NOERROR;
}
//////////////////////////////////////////////////
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
AFX_MANAGE_STATE(_afxModuleAddrThis);
if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
return ResultFromScode(SELFREG_E_TYPELIB);
if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
return ResultFromScode(SELFREG_E_CLASS);
return NOERROR;
}
За Вас ее пишет AppWizard.