С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135

Автоматическая регистрация ACTIVEX

13.03.2011, 10:17. Показов 2058. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Написал собственный компонент ACTIVEX, зарегистрировал, вставляю в программу - всё нормально работает. Но вот беда!!! Переношу прогу с этим компонентом на другой комп, приходится снова регистрировать, через консоль. Или вставляю компонент в любой браузер, либо в WORD, EXCEL. И не получается. Использую VSTUDIO 2010.
Расскажите пожалуйста все премудрости этой нелёгкой работы. А лучше подкрепить кодом. Могу выложить исходник компонента ACTIVEX
За ранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2011, 10:17
Ответы с готовыми решениями:

Регистрация ActiveX (.NET , ATL)
Решился перейти от BCB к VC и, ессно, столктулся с проблемами ... Проблема 1 (насущная). Создаю в Visual C++ .NET ATL-проект - библиотеку...

Автоматическая регистрация классов в С++
Приветствую! Собственно потребовалась реализация базового класса который бы, автоматический регистрировал классы наследники для...

регистрация ActiveX
Здравствуйте, срочно нужно зарегистрировать элемент ActiveX. Access97, он отказывается подключать - требует какой-то специальной программы...

9
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
13.03.2011, 10:49
Цитата Сообщение от Uklunok Посмотреть сообщение
Могу выложить исходник компонента ACTIVEX
выкладывай, так проще будет разобраться
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
13.03.2011, 10:55
Не проще сделать через установщик, что бы он регистрировал при установке? Простым переносом система никак не сможет узнать о новом компоненте
0
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
13.03.2011, 11:05  [ТС]
Есть файл .cpp в котором указана функция DllRegisterServer, где - то прочитал, что она отвечает за регистрацию, вот он файл
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// MyClock.cpp : Implementation of CMyClockApp and DLL registration.
 
#include "stdafx.h"
#include "MyClock.h"
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
CMyClockApp theApp;
 
const GUID CDECL _tlid = { 0x893579F, 0x7FD2, 0x4C5E, { 0xB0, 0x1E, 0xBF, 0x5E, 0x47, 0xB2, 0xA1, 0x9F } };
const WORD _wVerMajor = 1;
const WORD _wVerMinor = 0;
 
// CMyClockApp::InitInstance - DLL initialization
 
BOOL CMyClockApp::InitInstance()
{
    BOOL bInit = COleControlModule::InitInstance();
 
    if (bInit)
    {
        // TODO: Add your own module initialization code here.
    }
 
    return bInit;
}
 
// CMyClockApp::ExitInstance - DLL termination
 
int CMyClockApp::ExitInstance()
{
    // TODO: Add your own module termination code here.
 
    return COleControlModule::ExitInstance();
}
 
 
// 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;
}
А это код компонента непосредственно:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
// MyClockCtrl.cpp : Implementation of the CMyClockCtrl ActiveX Control class.
 
#include "stdafx.h"
#include "MyClock.h"
#include "MyClockCtrl.h"
#include "MyClockPropPage.h"
#include "afxdialogex.h"
#include <iostream>
#include <time.h>
 
 
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
 
 
IMPLEMENT_DYNCREATE(CMyClockCtrl, COleControl)
 
// Message map
 
BEGIN_MESSAGE_MAP(CMyClockCtrl, COleControl)
    ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
    ON_WM_CREATE()
    ON_WM_TIMER()
END_MESSAGE_MAP()
 
// Dispatch map
 
BEGIN_DISPATCH_MAP(CMyClockCtrl, COleControl)
    DISP_FUNCTION_ID(CMyClockCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()
 
 
// Event map
 
BEGIN_EVENT_MAP(CMyClockCtrl, COleControl)
END_EVENT_MAP()
 
 
 
// Property pages
 
// TODO: Add more property pages as needed.  Remember to increase the count!
BEGIN_PROPPAGEIDS(CMyClockCtrl, 1)
    PROPPAGEID(CMyClockPropPage::guid)
END_PROPPAGEIDS(CMyClockCtrl)
 
 
// Initialize class factory and guid
 
IMPLEMENT_OLECREATE_EX(CMyClockCtrl, "MYCLOCK.MyClockCtrl.1",
    0x84516d5, 0x2e9e, 0x46d8, 0xbf, 0x7, 0x20, 0xb1, 0x5c, 0xfd, 0x59, 0x96)
 
// Type library ID and version
 
IMPLEMENT_OLETYPELIB(CMyClockCtrl, _tlid, _wVerMajor, _wVerMinor)
 
 
// Interface IDs
 
const IID IID_DMyClock = { 0x60488476, 0xDD22, 0x4B43, { 0x8F, 0xAF, 0xEE, 0xC6, 0x90, 0xF9, 0xF8, 0x40 } };
const IID IID_DMyClockEvents = { 0xA28D3ED5, 0x77A6, 0x46DC, { 0xBE, 0x2A, 0x24, 0x1E, 0xCA, 0xDA, 0x82, 0xC0 } };
 
 
// Control type information
 
static const DWORD _dwMyClockOleMisc =
    OLEMISC_ACTIVATEWHENVISIBLE |
    OLEMISC_SETCLIENTSITEFIRST |
    OLEMISC_INSIDEOUT |
    OLEMISC_CANTLINKINSIDE |
    OLEMISC_RECOMPOSEONRESIZE;
 
IMPLEMENT_OLECTLTYPE(CMyClockCtrl, IDS_MYCLOCK, _dwMyClockOleMisc)
 
BOOL CMyClockCtrl::CMyClockCtrlFactory::UpdateRegistry(BOOL bRegister)
{
    
    if (bRegister)
        return AfxOleRegisterControlClass(
            AfxGetInstanceHandle(),
            m_clsid,
            m_lpszProgID,
            IDS_MYCLOCK,
            IDB_MYCLOCK,
            afxRegApartmentThreading,
            _dwMyClockOleMisc,
            _tlid,
            _wVerMajor,
            _wVerMinor);
    else
        return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
}
 
// CMyClockCtrl::CMyClockCtrl - Constructor
 
CMyClockCtrl::CMyClockCtrl()
{
    InitializeIIDs(&IID_DMyClock, &IID_DMyClockEvents);
    // TODO: Initialize your control's instance data here.
}
 
 
 
// CMyClockCtrl::~CMyClockCtrl - Destructor
 
CMyClockCtrl::~CMyClockCtrl()
{
    // TODO: Cleanup your control's instance data here.
}
 
 
// CMyClockCtrl::OnDraw - Drawing function
 
void CMyClockCtrl::OnDraw(
            CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
    if (!pdc)
        return;
 
    // TODO: Replace the following code with your own drawing code.
 
           CDC dcTemp;
    CBitmap cb;
    cb.LoadBitmap(IDB_BITMAP1);
    dcTemp.CreateCompatibleDC(pdc); 
    dcTemp.SelectObject(cb);          
    
    pdc->BitBlt(0,0,300,300,&dcTemp,0,0,SRCCOPY);
 
     //using namespace std;
 
        char CurrentTime[9]; 
        struct tm *newtime;
        time_t lTime;
        time(&lTime);
        newtime=localtime(&lTime);
                
        CString str;
        str.Format(L"%i:%i:%i",newtime->tm_hour, newtime->tm_min, newtime->tm_sec,CurrentTime);
 
 
    pdc->TextOutW(80,120,str);
    
}
 
 
// CMyClockCtrl::DoPropExchange - Persistence support
 
void CMyClockCtrl::DoPropExchange(CPropExchange* pPX)
{
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    COleControl::DoPropExchange(pPX);
 
    // TODO: Call PX_ functions for each persistent custom property.
}
 
 
// CMyClockCtrl::OnResetState - Reset control to default state
 
void CMyClockCtrl::OnResetState()
{
    COleControl::OnResetState();  // Resets defaults found in DoPropExchange
 
    // TODO: Reset any other control state here.
}
 
 
// CMyClockCtrl::AboutBox - Display an "About" box to the user
 
void CMyClockCtrl::AboutBox()
{
    CDialogEx dlgAbout(IDD_ABOUTBOX_MYCLOCK);
    dlgAbout.DoModal();
}
 
 
 
// CMyClockCtrl message handlers
 
 
int CMyClockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (COleControl::OnCreate(lpCreateStruct) == -1)
        return -1;
 
    // TODO:  Add your specialized creation code here
    // Установить таймер.
    SetTimer(1, 1000, NULL);
    return 0;
}
 
 
void CMyClockCtrl::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    // Переключить вызов на функцию OnDraw()
    InvalidateControl() ;
    COleControl::OnTimer(nIDEvent);
}
А как сделать чтобы VC сам всё сделал?
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
13.03.2011, 11:39
Он не сделает все сам. Ф-я DllRegisterServer вызывается когда запускаем regsvr (или как она там называется) с указанием библиотеки, которую надо зарегить. Этот сервис вытаскивает ф-ю DllRegisterServer, берет из нее параметры и вписывает в реестр все ID, ClassName и т.п. Короче говоря в любом случае сначала надо регистрацию из вне запустить.
0
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
13.03.2011, 11:41  [ТС]
Ну а всё же, есть какой-нибудь компонент с открытым кодом??? Я гляну как там, и вставлю себе
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
13.03.2011, 11:52
Цитата Сообщение от Uklunok Посмотреть сообщение
Ну а всё же, есть какой-нибудь компонент с открытым кодом??? Я гляну как там, и вставлю себе
Нету и быть не может, почему - объяснил выше. Делай инсталятор и регистрируй через него
0
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
13.03.2011, 12:05  [ТС]
А как сделать этот установщик??? это чтоль .inf файл??
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
13.03.2011, 12:12
я в свое время использовал Inno Setup, делает дистрибутив, который при распаковке автоматом запускает регистрацию библиотеки в системе.
0
3 / 3 / 0
Регистрация: 08.05.2010
Сообщений: 135
13.03.2011, 12:44  [ТС]
Цитата Сообщение от oxotnik Посмотреть сообщение
я в свое время использовал Inno Setup, делает дистрибутив, который при распаковке автоматом запускает регистрацию библиотеки в системе.
Скачал эту прогу. Но не знаю что в скрипте ниписать?(((

Добавлено через 9 минут
Сделал. Ну а что толку... ФАЙЛ с расширением .ocx вставляю в EXCEL и ничего
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.03.2011, 12:44
Помогаю со студенческими работами здесь

ActiveX регистрация элемента
Мне необходимо использовать mshflxgrd.ocx контрол в форме проекта MS Access. Но вставить этот контрол на форму не получается. Появляется...

Регистрация ActiveX компонента
С подключенным ActiveX компонентом приложение работает только на том компьютере, на котором этот компонент зарегистрирован в реестре. При...

Автоматическая регистрация curl
Есть один сайт который хотелось бы парсить но у него регистрация и страницы недоступны для парсинга вот форма входа на сайт &lt;form...

Автоматическая регистрация на сайте
Неделю назад замечена сильная нагрузка на сайт, нагрузка на БД достигала 4000 вместо стандартных 100. Начали появляться новые пользователи...

Регистрация библиотеки как ActiveX
Всем привет, есть проблема в регистрации простой библиотеки как COM компонента я не понимаю в чем проблема. Приведу код и сразу скажу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru