Форум программистов, компьютерный форум CyberForum.ru

C++: COM, OLE, ActiveX

Войти
Регистрация
Восстановить пароль
 
hoggy
6368 / 2586 / 451
Регистрация: 15.11.2014
Сообщений: 5,716
Завершенные тесты: 1
#1

Взаимодействие exe64 с dll32. COM объект без регистрации в реестре - C++ COM

17.02.2016, 00:26. Просмотров 733. Ответов 7
Метки нет (Все метки)

добрый вечер.

windows7 (или выше), visual studio 2013, c++

есть 64 битное приложение (для простоты пусть будет обычное консольное)
и 32 битная библиотека.

нужно наладить взаимодействие при помощи COM объекта.

при этом критично обойтись без регистрации в реестре.

можно ли каким то образом сделать такое?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2016, 00:26     Взаимодействие exe64 с dll32. COM объект без регистрации в реестре
Посмотрите здесь:
C++ COM OLE без регистрации в реестре
C++ COM Связь клиента с локальным exe-сервером без регистрации в реестре
C++ COM Как зарегистрировать в реестре сервер как Word.Application, но со своим CLSIDом?
Выполнить поиск в реестре регистрации заданного пользователем расширения
Взаимодействие с клиентом steam: Регистрации, авторизация C#
при вызове конструктора присваивания надо возвращать ссыль на объект или сам объект. Смысл? Значения нужных полей меняютмся и без этого! C++
C++ WinAPI Применение изменений в реестре без перезагрузки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3116 / 1918 / 208
Регистрация: 13.01.2012
Сообщений: 7,332
17.02.2016, 13:11     Взаимодействие exe64 с dll32. COM объект без регистрации в реестре #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от hoggy Посмотреть сообщение
можно ли каким то образом сделать такое?
MS вроде что то там придумал для этого тут. но я этого не понял и выглядит как то тяжело
hoggy
6368 / 2586 / 451
Регистрация: 15.11.2014
Сообщений: 5,716
Завершенные тесты: 1
17.02.2016, 20:05  [ТС]     Взаимодействие exe64 с dll32. COM объект без регистрации в реестре #3
Цитата Сообщение от vxg Посмотреть сообщение
MS вроде что то там придумал для этого тут. но я этого не понял и выглядит как то тяжело
спасибо.

однако, прежде чем написать сюда, я основательно перерыл интернеты.
msdn - первое, где я побывал.
даже нашел у них проект-иллюстрацию (которая без напильника не заработала).

и даже уже сумел организовать взаимодействие между клиентом и сервером.

но есть проблема:

что бы обойтись без регистрации,
нужно организовать манифест для клиента, в котором указывается с какой dll нужно связываться.

проблема здесь в том, что это получается связка: CLSCTX_INPROC_SERVER

вообще, INPROC_SERVER у меня прекрасно заработал.
но это не то, что нужно.

мне же нужно из 64 битного executable связываться с 32 library.
собственно, и com только для этого и нужен изначально.
а значит, что мне нужно что-то вроде CLS_CTX_LOCAL_SERVER

я думал, ком-сервис устроет для меня суррогатный процесс, но нет.
связь не устанавливается.


сейчас я думаю организовать com внутри 32 битного executable

потом для 64 битного executable прописать манифест связи не с dll, а с exe
но не уверен, что сработает.

мне не удалось найти никаких вразумительных материалов на эту тему.

так что я уже второй день какими то
непонятными экспериментами занимаюсь...
Убежденный
Системный программист
Эксперт С++
15237 / 6869 / 1088
Регистрация: 02.05.2013
Сообщений: 11,248
Завершенные тесты: 1
17.02.2016, 20:51     Взаимодействие exe64 с dll32. COM объект без регистрации в реестре #4
hoggy, а почему бы не использовать 32-битный rundll32.dll?
Связываться с COM не придется, с регистрацией в реестре тоже.
hoggy
6368 / 2586 / 451
Регистрация: 15.11.2014
Сообщений: 5,716
Завершенные тесты: 1
17.02.2016, 23:22  [ТС]     Взаимодействие exe64 с dll32. COM объект без регистрации в реестре #5
Цитата Сообщение от Убежденный Посмотреть сообщение
а почему бы не использовать 32-битный rundll32.dll?
потому что я слишком плохо знаю материал.
нарыл run32dll.exe,
который позволяет запускать dll на выполнение.
но мне не очевидно, как она должна быть оформлена, что бы работать с COM.

про rundll32.dllмне вообще ничего не известно.

поэтому я и создал тему.
Убежденный
Системный программист
Эксперт С++
15237 / 6869 / 1088
Регистрация: 02.05.2013
Сообщений: 11,248
Завершенные тесты: 1
18.02.2016, 08:34     Взаимодействие exe64 с dll32. COM объект без регистрации в реестре #6
Наверняка здесь ты уже побывал, но все же:

INFO: Windows Rundll and Rundll32 Interface
https://support.microsoft.com/en-us/kb/164787

Т.е. как я вижу - нужно из 64-битного exe запустить 32-битный rundll32.exe,
передав к нему путь к 32-битной dll. И dll должна иметь экспортируемую
функцию, оформленную так, как написано в статье.

Цитата Сообщение от hoggy Посмотреть сообщение
мне не очевидно, как она должна быть оформлена, что бы работать с COM
Насколько я помню, COM-сервер в exe без регистрации в реестре
сделать не получится. Registration-Free COM - это только для
внутрипроцессных серверов (inproc, т.е. dll).

А принципиально вообще связываться с COM?
Нельзя ли, например, заюзать RPC вместо него?
hoggy
6368 / 2586 / 451
Регистрация: 15.11.2014
Сообщений: 5,716
Завершенные тесты: 1
28.02.2016, 19:24  [ТС]     Взаимодействие exe64 с dll32. COM объект без регистрации в реестре #7
Цитата Сообщение от Убежденный Посмотреть сообщение
А принципиально вообще связываться с COM?
да. не обязательно dll, можно local com server,
но нужно что бы это был com.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2016, 11:33     Взаимодействие exe64 с dll32. COM объект без регистрации в реестре
Еще ссылки по теме:
Применить изменения в реестре без перезагрузки Visual Basic .NET
C# Как прочитать значение в реестре без ошибок?
C++ WinAPI Как заставить Windows принять изменения в реестре без перезагрузки?
PHP Отзывы без регистрации
Взаимодействие с++ и Java без JNI Android

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

Или воспользуйтесь поиском по форуму:
rfootq
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 3
31.03.2016, 11:33     Взаимодействие exe64 с dll32. COM объект без регистрации в реестре #8
У 1с ников есть так называемые технологии создания внешних компонент. Без регистрации используется native api. Документация есть в сети, по запросу "Создание внешних компонент 1с 8.3". Я думаю что можно как то извратиться, и прикрутить это под Ваши задачи.
Yandex
Объявления
31.03.2016, 11:33     Взаимодействие exe64 с dll32. COM объект без регистрации в реестре
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru