Форум программистов, компьютерный форум, киберфорум
C++: COM, OLE, ActiveX
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 23
1

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

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

Здравствуйте Уважаемые!
есть установленная(на сервер) лицензионная программа 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2020, 19:22
Ответы с готовыми решениями:

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

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

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

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

10
5976 / 4006 / 1645
Регистрация: 07.05.2019
Сообщений: 12,481
Записей в блоге: 1
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
5976 / 4006 / 1645
Регистрация: 07.05.2019
Сообщений: 12,481
Записей в блоге: 1
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
5976 / 4006 / 1645
Регистрация: 07.05.2019
Сообщений: 12,481
Записей в блоге: 1
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‐пропагандист
506 / 437 / 104
Регистрация: 18.12.2014
Сообщений: 994
Записей в блоге: 2
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‐пропагандист
506 / 437 / 104
Регистрация: 18.12.2014
Сообщений: 994
Записей в блоге: 2
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.06.2020, 08:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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

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

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


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

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

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