Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760

Связь клиента с локальным exe-сервером без регистрации в реестре

28.02.2016, 19:52. Показов 1322. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
добрый вечер.

есть готовый ATLExeServer,
и консольный клиент.

нужно осуществить взаимодействие между ними без необходимости регистрации в реестре.

сразу скажу, что вариант с регистрацией в реестре - рабочий.

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


проблема следующая:

в конструкторе/деструкторе com-объекта прописал вывод лога в текстовый файл.
просто, что бы зафиксировать факты:
объект корректно создается, и корректно разрушается.

далее, я в ручную запускаю сервер.
он же exe, запускаю как самый обычный файл кликом мышки.
после чего, его можно увидеть в списках
запущенных процессов в диспетчере.

далее запускаю exe клиента.
клиент не может получить доступ к интерфейсу com-объекта сервера.

привожу код клиента:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// импортирую данные из библиотеки типов
// #import PATH_TO_TYPELIBRARY__ no_namespace
#include "precompiled.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    (void)argc, argv;
 
    setlocale(LC_ALL,"");
    CoInitializeEx(0, COINIT_MULTITHREADED);
 
    // сервер при запуске регистрирует фабрику своего com-объекта
    // после чего, эта фабрика находится в списке "активных" объектов
    // в диспетчере com-библиотеки
 
    // и любое приложение может запросить эту фабрику
    // нужно лишь указать гуид объекта
    // который эта фабрика должна создавать
 
    IClassFactory* factory = NULL;
    const auto hRe = CoGetClassObject(__uuidof(ATLSimpleObjectSTA), 
        CLSCTX_LOCAL_SERVER, 
        NULL, 
        __uuidof(IClassFactory), 
        (void**)&factory
    );
 
    // в этой точке все хорошо.
    // клиент благополучно заполучил фабрику в пользование
    // теперь нужно создать сам объект
    
    IUnknown* ptr_ = NULL;
    auto hRe2 = factory->CreateInstance(NULL, __uuidof(IUnknown), (void**)&ptr_);
 
    // создание com-объекта проходит отлично.
    // никаких ошибок. интерфейс валидный.
    // в конструкторе com-объекта я вывожу лог в обычный текстовый файл.
    // и по наличию этого файла делаю вывод:
    // конструктор com-объекта действительно отработал
 
    // если сделать ptr_->Release();
    // то в файловом логе, я увижу срабатывание деструктора
    // com-объекта.
 
    // обратите внимание: клиент заполучает фабрику объекта
    // а затем создает сам объект
    // и все это - без необходимости использовать реестр
    // и без необходимости side by side сборки
 
    // проблема в том, что нам не нужен интерфейс IUnknown
    // для работы клиенту нужен интерфейс IATLSimpleObjectSTA
    // в котором определены все необходимые методы
    // ради доступа к которым вся эта затея с локальным сервером и затевалась
 
    IATLSimpleObjectSTAPtr ptr;
    auto hRe3 = ptr_->QueryInterface( __uuidof(IATLSimpleObjectSTA), (void**)&ptr);
 
    // однако, к сожалению это не работает
    // ошибка: hRe3 E_NOINTERFACE No such interface supported.
    // интерфейс IATLSimpleObjectSTA не поддерживается.
 
    ptr_->Release();
 
    CoUninitialize();
    system("pause");
}
есть подозрение, что это как то связанно с proxy/stub

клиент не может общаться с локальным сервером напрямки
но на этом мои предположения заканчиваются.

как заставить клиент подхватывать нужные интерфейсы com-объекта?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.02.2016, 19:52
Ответы с готовыми решениями:

Связь клиента с сервером
Доброго времени суток, уважаемые пользователи форума, прошу поделиться вас опытом и советами со мной в следующих вопросах... Суть...

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

Как правильно установить связь клиента с сервером при помощи websock?
Всем доброе время суток!!! Помогите пожалуйста разобраться. Необходимо установить связь от клиента, к серверу для передачи и получения...

1
Модератор
 Аватар для vxg
3402 / 2173 / 353
Регистрация: 13.01.2012
Сообщений: 8,430
01.03.2016, 08:43
тоже видел такое подозреваю библиотеку типов и маршалинг

Добавлено через 3 минуты
Может не может библиотеку типов нарыть

Добавлено через 9 минут
Точнее может быть так - система видет вашу фабрику но не видет в реестре какие интерфейсы она создаёт поэтому зарубает вызов во время транзита. До сервера квер доходит?

Добавлено через 3 минуты
Хардкор вариант - вернуть вместо ункноун свой интерфейс и тупо кастануть)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.03.2016, 08:43
Помогаю со студенческими работами здесь

NET-библиотека в Delphi без регистрации ее в реестре
Всем привет! Хочу использовать библиотеку, написанную на c#, в программе, написанной на Delphi. Почитал на форумах про то, как это...

Cеть с доменом, файл обменником, сервером 1С, атс, фаерволом, локальным сервером сайта
Народ помогите схематично хотябы разобраться как организовать ПАРАВЕЛЬНО сеть с доменом, файл обменником, сервером 1С, атс, фаерволом,...

Взаимодействие exe64 с dll32. COM объект без регистрации в реестре
добрый вечер. windows7 (или выше), visual studio 2013, c++ есть 64 битное приложение (для простоты пусть будет обычное...

Обработать файл на стороне клиента, без общения с сервером?
Реально ли это сделать, пользователь выберет файл в браузере, так же на стороне клиента файл обрабатывается и только результат обработки...

Синхронизация клиента с сервером, без участия в обработке данных
Суть вопроса такова: есть сетевая игра, в которой все данные обрабатываются сервером, клиент отвечает только за визуализацию объектов,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Создаем RESTful API с Laravel
Jason-Webb 28.04.2025
REST (Representational State Transfer) — это архитектурный стиль, который определяет набор принципов для создания веб-сервисов. Этот подход к построению API стал стандартом де-факто в современной. . .
Дженерики в C# - продвинутые техники
stackOverflow 28.04.2025
История дженериков началась с простой идеи — создать механизм для разработки типобезопасного кода без потери производительности. До их появления программисты использовали неуклюжие преобразования. . .
Тестирование в Python: PyTest, Mock и лучшие практики TDD
py-thonny 28.04.2025
Тестирование кода играет весомую роль в жизненном цикле разработки программного обеспечения. Для разработчиков Python существует богатый выбор инструментов, позволяющих создавать надёжные и. . .
Работа с PDF в Java с iText
Javaican 28.04.2025
Среди всех форматов PDF (Portable Document Format) заслуженно занимает особое место. Этот формат, созданный компанией Adobe, превратился в универсальный стандарт для обмена документами, не зависящий. . .
Динамические массивы в C++ - создание и использование
NullReferenced 27.04.2025
Динамические массивы представляют собой один из фундаментальных инструментов программирования на C++, позволяющий создавать структуры данных, размер которых определяется во время выполнения. . .
Асинхронный JavaScript: Промисы, Async/Await и Fetch API
Reangularity 27.04.2025
Пользователь заходит на веб-страницу, нажимает кнопку и. . . ничего не происходит. Сайт словно замер. Через несколько секунд всё внезапно оживает, но пользователь уже успел закрыть вкладку. Знакомая. . .
Management on GitLab and repository management in Visual Studio code
jigi33 27.04.2025
- repo management on GitLab - CI/ CD in GitLab - VCS repository management in Visual Studio code (see attachments)
Kanban или Scrum - что выбрать?
EggHead 27.04.2025
Kanban и Scrum — уже много лет удерживают лидирующие позиции среди гибких подходов. Руководители проектов и команды разработчиков то и дело сталкиваются с дилеммой: какой из этих двух методов выбрать. . .
Кастомные Middleware на C# в ASP.NET Core
UnmanagedCoder 27.04.2025
Разработка веб-приложений сегодня мало напоминает монолитное программирование прошлых лет. На смену громоздким блокам кода пришла модульная архитектура, где каждый компонент выполняет строго. . .
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru