COM-сервер C # вне процесса с пользовательским доступом

Мне нужно реализовать вне-серверный сервер в 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 ++ in-proc com сервер, который создает объект и регистрирует его в таблице запущенных объектов. Этот сервер затем возвращает моникер клиенту. Возможно ли сделать это в C #?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]