Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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 объекта и в эту обертку затащить запущенную программу. |