C# でアウト プロセス サーバーを実装する必要があります。基本的なサーバー部分が完了し、次のように progid によってサーバーにアクセスできるようになります: "someNamespace.someClassname"。
しかし、今は「progid:Application(set=somevalue)」のようなものが欲しいです。
C#でこれを行う方法はありますか?
これまで、ファクトリを登録すると、このファクトリは com オブジェクトを返します。
Guid appClsId = new Guid(ComCst.ApplicationId);
int hRes = ComNtv.CoRegisterClassObject(ref appClsId, new ApplicationFac(),
CLSCTX.LOCAL_SERVER, REGCLS.MULTIPLEUSE | REGCLS.SUSPENDED, out cokAppObj);
if (hRes != 0)
{
throw new ApplicationException(
"CoRegisterClassObject failed w/err 0x" + hRes .ToString("X"));
}
hRes = ComNtv.CoResumeClassObjects();
if (hRes != 0)
{
if (cokAppObj!= 0)
{
ComNtv.CoRevokeClassObject(cokAppObj);
}
throw new ApplicationException(
"CoResumeClassObjects failed w/err 0x" + hRes .ToString("X"));
}
これがファクトリの CreateInstance メソッドです。
public int CreateInstance(IntPtr pUnkOuter, ref Guid riid,
out IntPtr ppvObject)
{
ppvObject = IntPtr.Zero;
if (pUnkOuter != IntPtr.Zero)
{
Marshal.ThrowExceptionForHR(ComCst.CLASS_E_NOAGGREGATION);
}
if (riid == new Guid(ComCst.ApplicationId) ||
riid == new Guid(ComCst.IID_IDispatch) ||
riid == new Guid(ComCst.IID_IUnknown))
{
IntPtr ptr = Marshal.GetComInterfaceForObject(
new Application(), typeof(IApplication));
ppvObject = ptr;
}
else
{
Marshal.ThrowExceptionForHR(ComCst.E_NOINTERFACE);
}
return 0;
}
情報: 既に実装されている c++ インプロセス com サーバーがあり、オブジェクトを作成して実行中のオブジェクト テーブルに登録します。このサーバーはクライアントにモニカを返します。これをC#で達成することは可能ですか?