다음 클라이언트 컴퓨터 응용 프로그램이 있습니다.
서버가 시작되어 특정 포트를 수신합니다. 많은 CorelDraw 세션이 수동 또는 프로그래밍 방식으로 시작됩니다. 각 corel 세션 (클라이언트)은 현재 프로세스 ID를 보내는 서버에 연결합니다. 서버는 모든 연결을 listView에 유지하고 각 연결을 기반으로 EndPoint는 메시지를 변경 (보내고받을 수 있음) 할 수 있습니다. 이제 특정 프로세스 ID의 COM 개체를 사용하고 싶습니다. 내가 시도 :프로세스 ID 또는 MainWindowHandle을 가진 여러 인스턴스에 대한 COM 개체 (Corel.Application) 찾기
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.Application 객체를 사용하는 oportunity을주는 코렐 COM 개체를 얻을 수있는 방법이 있나요?
MessageBox.Show(corApp.Documents.Count.ToString());
미리 감사드립니다.
Thnks! 이미 첫 번째 제안을 시도했지만 안내서를 알고있는 Microsoft COM 개체의 경우 잘 작동합니다. IID_IDispatch As String = "{00020400-0000-0000-C000-000000000046}". 나는 corel 응용 프로그램을 위해 그것을 결정하는 방법을 찾을 수 없습니다. 두 번째 제안에 대해서는 RotView를 찾지 못했습니다 ... 아마 가이드를 찾기 위해 도움이 될 것입니다 ... – FaneDuru