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

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

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

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

есть готовый 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
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,463
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru