0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 23
1

Создание COM объекта из запущенного приложения

27.04.2020, 19:22. Показов 20529. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте Уважаемые!
есть установленная(на сервер) лицензионная программа 1с83 ключ на 5 лицензий
подключение и запуск программы на других компах происходит по ссылке.

есть необходимость по работе с этой 1с через COM

но как COM объект данная 1С зарегистрирована только на сервере

Теперь собственно вопрос:

возможно ли на языке c++ или C# получить доступ к запущенному приложению как COM объекту.

на шарпе нашел кусочек кода но он не работает
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static uint GetProcessID() {
    return (uint)Process.GetProcessesByName("1C Предприятие (8.3.16.1063)")[0].Id;
}
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId);
private static Type GetTypeFromHandle2(IntPtr handle) {
     unsafe {
          //вылетает здесь
          var method = typeof(Type).GetMethod("GetTypeFromHandleUnsafe",
          BindingFlags.Static | BindingFlags.NonPublic);
          return (Type)method.Invoke(null, new object[]{handle});
            }
}
public void MyFunc(){
     //указатель получаем без проблем
     IntPtr process_handle = OpenProcess(0x001F0FFF, 0, GetProcessID());
     var v83comConnector  = Type.GetTypeFromHandle2(process_handle);
}
пытался на c++ реализовать. загвоздка в CLSID можно ли его выковырять из запущенного приложения.

Возможно на c++ можно сделать обертку в виде COM объекта и в эту обертку затащить запущенную программу.

Помогите пожалуйста разобраться в данном вопросе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2020, 19:22
Ответы с готовыми решениями:

Проверка наличия запущенного объекта MS Word
Функция проверки function CheckWordRun: Boolean; begin Result:= True; try MyWord:=...

Проверка запущенного приложения
Как можно проверить запущено ли приложение или нет. Пробовал такой код: Process processList; ...

Блокировка запущенного приложения
Здравствуйте. Необходимо написать программу, через которую создаётся ярлык на стороннее...

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

10
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.04.2020, 19:37 2
Цитата Сообщение от SicSten Посмотреть сообщение
пытался на c++ реализовать. загвоздка в CLSID можно ли его выковырять из запущенного приложения.
Не надо ничего выковыривать, просто создаёшь объект при помощи CoCreateInstance и всё
0
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 23
27.04.2020, 19:48  [ТС] 3
Если несложно можно пример

в моем примере этой функции нужен CLSID

C++
1
hr = CoCreateInstance(clsid83, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&pv83);
в идеале мы получаем его таким способом если com зарегистрирован

C++
1
hr = CLSIDFromProgID(L"V83.Application", &clsid83);
у меня есть только запущенный экземпляр самой 1С, как com она не зарегистрирована на моем рабочем месте
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.04.2020, 19:53 4
Цитата Сообщение от SicSten Посмотреть сообщение
у меня есть только запущенный экземпляр самой 1С, как com она не зарегистрирована на моем рабочем месте
Он запущен на другом компе?
0
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 23
27.04.2020, 19:55  [ТС] 5
само приложение 1С запускается на моем компе

а как COM оно зарегистрировано и впрочем установлено на сервере
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
27.04.2020, 19:58 6
Цитата Сообщение от SicSten Посмотреть сообщение
само приложение запускается на моем компе
Попробуй зарегистрировать - "C:\Program Files\1cv8\[версия платформы]\bin\1cv8.exe" /regserver
0
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 23
27.04.2020, 20:06  [ТС] 7
зарегистрировать можно и установить на каждое рабочее место можно заморочиться

вопрос в другом возможно ли получить com из запущенного приложения


подключение через зарегистрированный com таким способом "C:\Program Files\1cv8\[версия платформы]\bin\1cv8.exe" /regserver

подразумевает запуск экземпляра 1с

но у нас есть запущенная 1С но нет зарегистрированного в реестре clsid

весь смысл вопроса в том можно ли к запущенному приложению подключится как к com объекту
0
COM‐пропагандист
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,253
Записей в блоге: 4
29.06.2020, 00:45 8
Если нет CLSID, то ищите в реестре ProgID, дальше вызываете ClsidFromProgid и получаете нужный CLSID.
Только что это даст? Вам ещё нужен IID интерфейса.

Добавлено через 59 секунд
Возможно, оно поддерживает IDispatch — тогда всё стандартно будет.
0
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 23
29.06.2020, 07:38  [ТС] 9
в данном конкретном случае в реестре компа на котором запущена программа никаких записей нет.

само приложение имеет все свойства com (на том компе где это приложение установлено никаких проблем с подключением нет)
в том числе поддерживает IDispatch
0
COM‐пропагандист
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,253
Записей в блоге: 4
29.06.2020, 22:15 10
Возможно, оно поддерживает IDispatch — тогда всё стандартно будет.
Цитата Сообщение от SicSten Посмотреть сообщение
весь смысл вопроса в том можно ли к запущенному приложению подключится как к com объекту
Вообще, когда клиент создаёт инстанцию кокласса, то будет ли сервер располагаться в DLL, в отдельном процессе или на другом компьютере — клиентский код это волновать не должно.
0
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 23
30.06.2020, 08:31  [ТС] 11
вот возможно решение сводится к созданию com обертки и включении в эту обертку запущенного приложения
только непонятно: если в запущенном приложении все комовские интерфейсы реализованы уже как их инициализировать
0
30.06.2020, 08:31
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.06.2020, 08:31
Помогаю со студенческими работами здесь

Настройки приложения запущенного на Tomcat
Деплою на Tomcat war-файл из IDEA. Приложение запускается и работает, но почему-то не подхватывает...

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

Иконка приложения, запущенного с ярлыка, в taskbar
Такой вопрос по устройству Windows. У меня есть ярлык на приложение. Когда я запускаю приложение с...

Не меняется приоритет процесса запущенного приложения - C#
Программа запускает процесс и выводит в textbox его приоритет. Дальше нужно открыть диспетчер...

Перехват макроса запущенного офисного приложения
Открываем стандартно, к примеру, Любой.XLS Нужно, чтобы вместо него: - запустился свой макрос...

Как узнать текущую директорию запущенного приложения?
Люди! Подскажите как я могу из моей VB программы узнать, в какой директории я нахожусь в данный...


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

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

Новые блоги и статьи
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru