Страница: 1 | 2 |
Вопрос: COM без регистрации
Добавлено: 06.10.10 19:01
Автор вопроса: Artyom
Можно ли использовать COM-компонент без регистрации через regsvr32?
Ответы
Всего ответов: 23
Номер ответа: 1
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #1
Добавлено: 06.10.10 21:35
Можно. Например, зарегистрировав через DllRegisterServer.
Номер ответа: 2
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #2
Добавлено: 06.10.10 21:37
Т.е. нельзя, без регистрации.
Номер ответа: 3
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 06.10.10 21:39
это тоже самое что регистарция через regsvr32..
Вопрос именно в том чтоб юзать com-oбъект, который вообще не прописан в системе.. а,скажем, тупо скопирован с другого компа
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 06.10.10 21:46
Я имею в виду, если просто положить dll в папку с программой, он по идее должен заработать?
Номер ответа: 5
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #5
Добавлено: 06.10.10 21:55
Обычно работает.
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 06.10.10 22:02
имхо, без регситрации никак.. COM-компонент по любому должен быть зареган в системе..
Номер ответа: 7
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #7
Добавлено: 07.10.10 06:17
Можно напрямую звать DllGetClassObject
Номер ответа: 8
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #8
Добавлено: 07.10.10 14:59
У кого то явные проблемы с пониманием того что есть ActiveX dll. Это не библиотека функций, которые можно вызывать по адресу. Это библиотека типов и классов. Чтобы использовать какой-либо метод объекта его нужно сперва создать. Любой вызов метода (аналога функции из обычной dll) привязан к экземпляру класса и содержит скрытый параметр-указатель на этот экземпляр. Сам объект может манипулировать иными структурами, которые также должны быть объявлены (зарегистрированы). Использовать ActiveX без регистрации бесмысленно.
Если так уж хочется не плодить мусор - можно использовать позднее связывание, DllRegisterServer и DllUnregisterServer.
Номер ответа: 9
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 08.10.10 00:54
Можно, только он не отдаст экземпляр класса.. Надо сначала получить IClassFactory а уж потом через CreateInstance создавать экземпляр, но для этого надо знать идентификатор интерфейса.. а где его брать если dll не зарегана!?
можно и так, только это опять таки тоже самое что и регистрация через regsvr32..
Есть еще вариант, использовать манифест, как это делает ClickOnce при публикации com-объектов (кому интересно, вам сюда: http://msdn.microsoft.com/en-us/library/ms165432(v=VS.90).aspx ), но этот вариант имеет ряд ограничений и далеко не всегда прокатывает..
Итог таков: Юзать ActiveX путем простого помещения в папку с программой, без совершения обряда танца с бубном - нельзя..
И кто-то, я не буду говорить кто, проиграл мне 2 кг копченого,украинского сала.
Номер ответа: 10
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #10
Добавлено: 08.10.10 04:11
Точно не у меня. CoGetClassObject в случае с COM DLL это тупой вызов DllGetClassObject после небольшой прогулки по реестру. Разумеется, предполагается, что у пользователя есть хедер со всеми гуидами и он не боится юзать фабрики.
Номер ответа: 11
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #11
Добавлено: 08.10.10 11:43
Не совсем. Это скорее похоже на LoadLibrary и FreeLibrary. Т.е. регистрим dll только на время использования, после чего подчищаем за собой. Только тут нужно контролировать один ньюанс - была ли данная dll зарегистрирована ранее
Номер ответа: 12
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #12
Добавлено: 08.10.10 13:48
Не согласен.. DllRegisterServer аналогично regsvr32 вносит изменения в реестр.. да, потом мы удаляем записи, но это не отменяет факт непосредственно регистрации на время использования.. А речь шла об использовании вообще без регистрации и,соответственно, без изменений в реестре
Номер ответа: 13
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #13
Добавлено: 08.10.10 15:40
С чем именно? Речь шла об использовании незарегистрированных компонентов, "подброшенных" в папку приложения.
С этой точки зрения регистрация dll не требуется, и в реестре мусора не остается. А что до записи в реестр - не все ли равно что приложение пишет в реестр и потом удаляет. Речь о том что от юзера регистрации модулей не требуется.
Номер ответа: 14
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #14
Добавлено: 08.10.10 15:43
Ответ: можно
И чего флудим?
Номер ответа: 15
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #15
Добавлено: 08.10.10 15:54
LOL, видимо недостаточно хорошо объяснили вопрос раз ты до сих пор не понял.. Имелось ввиду использование dll без каких либо изменений в реестре не важно каким способом.. (regsrv32 или DllRegisterServer).. Некто,кто проспорил мне сало, утверждал, что можно просто положить в папку, ничего не делать(имелось ввиду вообще ничего, никаких действий по регистрации, без каких либо изменений в реестре), и все будет работать..