Создавая элементы 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.