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

C++: COM, OLE, ActiveX

Войти
Регистрация
Восстановить пароль
 
hoggy
6636 / 2821 / 484
Регистрация: 15.11.2014
Сообщений: 6,240
Завершенные тесты: 1
#1

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

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

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

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

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

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

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

можно ли каким то образом сделать такое?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2016, 00:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Взаимодействие exe64 с dll32. COM объект без регистрации в реестре (C++ COM):

OLE без регистрации в реестре - C++ COM
Доброго времени суток. Можно ли использовать OLE без регистрации в реестре?

Связь клиента с локальным exe-сервером без регистрации в реестре - C++ COM
добрый вечер. есть готовый ATLExeServer, и консольный клиент. нужно осуществить взаимодействие между ними без необходимости...

Выполнить поиск в реестре регистрации заданного пользователем расширения - VBScript/JScript
Выполнить поиск заданного пользователем расширения файла в реестре. Если соответствующий раздел в реестре имеется, вывести его значение. ...

Взаимодействие с клиентом steam: Регистрации, авторизация - C#
Собственно в какую сторону копать. Функции нужны именно регистрации,авторизация и чтоб мог работать со steam гуардом(P.S сразу говорю не...

Применение изменений в реестре без перезагрузки - C++ WinAPI
Много где обсуждалась данная тема, но так ничего и не работает. SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0,...

Применить изменения в реестре без перезагрузки - Visual Basic .NET
Ребят, я сделал, асоциацию файлов (внёс изменение в реестр), у меня возникла проблемма, для того что бы изменения вступили в силу...

7
vxg
Модератор
3169 / 1972 / 221
Регистрация: 13.01.2012
Сообщений: 7,574
17.02.2016, 13:11 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от hoggy Посмотреть сообщение
можно ли каким то образом сделать такое?
MS вроде что то там придумал для этого тут. но я этого не понял и выглядит как то тяжело
1
hoggy
6636 / 2821 / 484
Регистрация: 15.11.2014
Сообщений: 6,240
Завершенные тесты: 1
17.02.2016, 20:05  [ТС] #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
но не уверен, что сработает.

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

так что я уже второй день какими то
непонятными экспериментами занимаюсь...
0
Убежденный
Системный программист
Эксперт С++
15616 / 7125 / 1127
Регистрация: 02.05.2013
Сообщений: 11,564
Записей в блоге: 1
Завершенные тесты: 1
17.02.2016, 20:51 #4
hoggy, а почему бы не использовать 32-битный rundll32.dll?
Связываться с COM не придется, с регистрацией в реестре тоже.
0
hoggy
6636 / 2821 / 484
Регистрация: 15.11.2014
Сообщений: 6,240
Завершенные тесты: 1
17.02.2016, 23:22  [ТС] #5
Цитата Сообщение от Убежденный Посмотреть сообщение
а почему бы не использовать 32-битный rundll32.dll?
потому что я слишком плохо знаю материал.
нарыл run32dll.exe,
который позволяет запускать dll на выполнение.
но мне не очевидно, как она должна быть оформлена, что бы работать с COM.

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

поэтому я и создал тему.
0
Убежденный
Системный программист
Эксперт С++
15616 / 7125 / 1127
Регистрация: 02.05.2013
Сообщений: 11,564
Записей в блоге: 1
Завершенные тесты: 1
18.02.2016, 08:34 #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 вместо него?
0
hoggy
6636 / 2821 / 484
Регистрация: 15.11.2014
Сообщений: 6,240
Завершенные тесты: 1
28.02.2016, 19:24  [ТС] #7
Цитата Сообщение от Убежденный Посмотреть сообщение
А принципиально вообще связываться с COM?
да. не обязательно dll, можно local com server,
но нужно что бы это был com.
0
rfootq
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 3
31.03.2016, 11:33 #8
У 1с ников есть так называемые технологии создания внешних компонент. Без регистрации используется native api. Документация есть в сети, по запросу "Создание внешних компонент 1с 8.3". Я думаю что можно как то извратиться, и прикрутить это под Ваши задачи.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2016, 11:33
Привет! Вот еще темы с ответами:

при вызове конструктора присваивания надо возвращать ссыль на объект или сам объект. Смысл? Значения нужных полей меняютмся и без этого! - C++
Друзья! Обнаружил пробел в знаниях. Собсно, вопрос в теме. Дополню лишь: поля объекта меняются на нужные значения и безо всякого возврата...

Как прочитать значение в реестре без ошибок? - C#
При переименовании раздела MyReg появляется ошибка и приложение зависает. Как обойти ошибку, если радела MyReg не будет? Visual...

Как заставить Windows принять изменения в реестре без перезагрузки? - C++ WinAPI
может немножко не в тему. но: необходимо перезагрузить реестр без перезагрузки компьютера - программно - средствами винапи, либо из...

Отзывы без регистрации - PHP
Всем добрый день!Многие наверно знают данный скрипт магазина.Там к любому товару можно оставлять отзыв,но только зарегистрированным...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
31.03.2016, 11:33
Ответ Создать тему
Опции темы

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