Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > C/C++: Системное программирование и WinAPI > Создание COM объекта из запущенного приложения


Автор: SicSten 27.04.20, 16:01
Здравствуйте Уважаемые!
есть установленная(на сервер) лицензионная программа 1с83 ключ на 5 лицензий
подключение и запуск программы на других компах происходит по ссылке.

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

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

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

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

на шарпе нашел кусочек кода но он не работает

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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 объекта и в эту обертку затащить запущенную программу.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)