Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: sharpc.livejournal.com
 Профиль | | #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
Можно напрямую звать DllGetClassObject

Можно, только он не отдаст экземпляр класса.. Надо сначала получить IClassFactory а уж потом через CreateInstance создавать экземпляр, но для этого надо знать идентификатор интерфейса.. а где его брать если dll не зарегана!?
можно использовать позднее связывание, DllRegisterServer и DllUnregisterServer.

можно и так, только это опять таки тоже самое что и регистрация через regsvr32..
Есть еще вариант, использовать манифест, как это делает ClickOnce при публикации com-объектов (кому интересно, вам сюда: http://msdn.microsoft.com/en-us/library/ms165432(v=VS.90).aspx ), но этот вариант имеет ряд ограничений и далеко не всегда прокатывает..

Итог таков: Юзать ActiveX путем простого помещения в папку с программой, без совершения обряда танца с бубном - нельзя..
И кто-то, я не буду говорить кто, проиграл мне 2 кг копченого,украинского сала.

Ответить

Номер ответа: 10
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #10
Добавлено: 08.10.10 04:11
Точно не у меня. CoGetClassObject в случае с COM DLL это тупой вызов DllGetClassObject после небольшой прогулки по реестру. Разумеется, предполагается, что у пользователя есть хедер со всеми гуидами и он не боится юзать фабрики.

Ответить

Номер ответа: 11
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #11 Добавлено: 08.10.10 11:43
можно и так, только это опять таки тоже самое что и регистрация через regsvr32.

Не совсем. Это скорее похоже на LoadLibrary и FreeLibrary. Т.е. регистрим dll только на время использования, после чего подчищаем за собой. Только тут нужно контролировать один ньюанс - была ли данная dll зарегистрирована ранее :)

Ответить

Номер ответа: 12
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #12 Добавлено: 08.10.10 13:48
Не совсем. Это скорее похоже на LoadLibrary и FreeLibrary.

Не согласен.. 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
Можно ли использовать COM-компонент без регистрации через regsvr32?

Я имею в виду, если просто положить dll в папку с программой

Ответ: можно
использовать позднее связывание, DllRegisterServer и DllUnregisterServer.

И чего флудим?

Ответить

Номер ответа: 15
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #15 Добавлено: 08.10.10 15:54
LOL, видимо недостаточно хорошо объяснили вопрос раз ты до сих пор не понял.. Имелось ввиду использование dll без каких либо изменений в реестре не важно каким способом.. (regsrv32 или DllRegisterServer).. Некто,кто проспорил мне сало, утверждал, что можно просто положить в папку, ничего не делать(имелось ввиду вообще ничего, никаких действий по регистрации, без каких либо изменений в реестре), и все будет работать..

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам