|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.07.2012, 22:44 | #1 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
И снова COM....
Доброго времени суток. Продолжаю изучать COM и опять наткнулся на непонятку.
Есть функция для регистрации компонента в реестре Код:
RegOpenKeyEx RegCreateKeyEx RegSetValueEx RegEnumKeyEx RegDeleteKey RegCloseKey Вопрос: Как реализовать саморегистрацию компонента? Знаю только что нужно: 1. Описать модуля DLL (я так понял эт: DLL = ::LoadLibrary(...) ) 2. Дружественное имя компонента (я так понял это имя, которое я буду видеть в реестре и задаю я) 3. Независящее от версий ProgID (тож задаю я) 4. ProgID (аналогично верхнему) 5. CLSID (вот это я хз откуда брать если компонент еще не зарегился) В примере видел функцию регистрации: Код:
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
|
21.07.2012, 22:45 | #2 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
Я там пропустил много кода, просто пример на страниц 4. Но я пересмотрел всё и не нашел что нужно. Заметил что есть #include "Registery.h" только вот самое главное, его реализацию, не написали. Я думаю что всё что я не нашел видать как раз в этом ашнике. Если это так, то тогда как реализовать это всё
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
Последний раз редактировалось kineziz; 21.07.2012 в 22:49. |
22.07.2012, 10:44 | #3 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Цитата:
Та самая функция скорее всего именно это и делает. CLSID_Component1 это CLSID вашего компонента - сами и определяйте. Это должно лежать в .h файле, через который потом пользователи будут создавать ваш класс. Вот чтиво для начала: http://blogs.msdn.com/b/larryosterma...05/509731.aspx |
|
22.07.2012, 15:22 | #4 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
ага понятно только не понятно как реализовать эту функцию.
Я так понял нужно: 1. Создать раздел в HKEY_CLASSES_ROOT\\ProgID char ProgID[] = "Component.Com.1" - надеюсь правильно(там ведь почти любое можно) 2. Создаем подраздел с именем CLSID 3. Записываем туда значение. В данном случае значение это CLSID компонента(класса) 4. Создаем подраздел в HKEY_CLESSES_ROOT\\CLSID\\ с именем CLSID нашего компонента (класса) 5. Создаем еще 1 подраздел InprocServer32 6. Туда записываем путь по которому расположено DLL Чтение. 1. Переходим в раздел с InpocServer32 нашего компонента. Считываем оттуда путь. 2. Загружаем DLL по этому пути. Похоже так. Только вот проблема с чтением данных: Код:
В реестре я создал запись "Record",считывается нормально а вот когда вывожу его: Код:
Подскажите как от пробелов при выводе избавится. Записываются ли ненужные пробелы в переменную Buffer (думаю да) Правильно ли я построил алгоритм регистрации компонента(класса)
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
Последний раз редактировалось kineziz; 22.07.2012 в 15:26. |
22.07.2012, 17:44 | #5 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Запустите regedit.exe и посмотрите на другие елементы.
Пробеллы скорее всего изза того, что стринг в unicode формате. Чтение делать не надо - зачем самому грузить свой же DLL. Если нужно создать объект, для этого есть CoCreateInstance() - DLL будет грузиться автоматически. Лучше сначала научится пользоваться COM-ом, потом писать компоненты. Начинать можно с http://en.wikipedia.org/wiki/Component_Object_Model и далее по ссылкам. |
22.07.2012, 20:53 | #6 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
Спасибо. И последний вопрос. В COM объекте можно не писать фабрику объектов. Или это обязательное условие, которое должно быть в каждом COM. Вроде когда я учился их писать они и без нее отлично работали
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
|
22.07.2012, 23:10 | #7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Увы, без этого нельзя. DllGetClassObject всегда должен возвращать IClassFactory. Если надо создавать много объектов одного типа так получается намного быстрее.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Снова и снова. | ladose | Общие вопросы Delphi | 1 | 11.04.2012 03:37 |
и снова С++ | ltony | Помощь студентам | 5 | 04.02.2012 02:16 |
и снова LPCWSTR | Farrel | Общие вопросы C/C++ | 1 | 04.10.2010 09:07 |
и снова assembler | Alex74 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 28.01.2010 12:47 |
MDIChild снова и снова... | Siber_Dec | Общие вопросы Delphi | 2 | 13.12.2009 03:24 |