У меня есть приложение Client Server, которое делает следующее:
Сервер запускает и прослушивает определенный порт. Многие операции corelDraw вручную или программно запускаются. Каждый сеанс corel (клиент) подключается к серверу, отправляя текущий идентификатор процесса. Сервер поддерживает все подключения в listView и на основе каждого соединения EndPoint может изменять (отправлять и получать) сообщения. Теперь я хотел бы использовать COM-объект определенного идентификатора процесса. Я пробовал:Найти COM-объект (Corel.Application) для нескольких экземпляров с идентификатором процесса или MainWindowHandle
using corel = Corel.Interop.VGCore;
int processID = Convert.ToInt32(lstClients.SelectedItems[0].SubItems[4].Text);//process ID string
Process corProc = Process.GetProcessById(processID);
int hwnd = (int)Process.GetProcessById(corProc).MainWindowHandle
this.Activate();
bool IsCom = corProc.GetType().IsCOMObject; // return false...
corApp = (corel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Corel.Application") // returns just the last session (not according to existing process ID
//tried also:
corApp = (corel.Application)System.Runtime.InteropServices.Marshal.GetObjectForIUnknown(corProc.Handle); // error...
//tried:
corApp = (corel.Application)Convert.ChangeType(corProc, typeof(corel.Application)); // error: 'Object must implement IConvertible.'
Есть ли способ, чтобы получить COREL объект COM, чтобы дать мне Oportunity использовать объект Corel.Application, как это?
MessageBox.Show(corApp.Documents.Count.ToString());
Заранее благодарен!
Thnks! Я уже пробовал ваше первое предложение, но оно хорошо работает для объектов Microsoft COM, где вы знаете руководство: IID_IDispatch As String = "{00020400-0000-0000-C000-000000000046}". Я не мог найти способ определить его для приложения corel. Для второго предложения я не мог найти, что RotView ... Может быть, это поможет мне, чтобы найти гида ... – FaneDuru