Как написать саморегистрационный элемент управления ActiveX (в C #)? - PullRequest
3 голосов
/ 29 мая 2009

Мне удалось создать небольшой элемент управления activex, но он требует, чтобы dll была зарегистрирована на клиенте (используя regasm).

Как мне избежать этой проблемы с регистрацией?

Я пытаюсь написать элемент управления activex, который доставляется через Интернет (в браузеры IE), чтобы получить доступ к клиентской веб-камере (используя directshow).

Вот мое простое управление:

  using System;
  using System.Runtime.InteropServices;
  namespace HelloNS
  {
      public interface IHello
      {
        string Message();
      }

      [ClassInterface(ClassInterfaceType.AutoDual)]
      public class Hello : IHello          {
        public string Message()
        {
            return "hello";
        }
      }
   }

А вот и мой зритель:

<html>
<head>
  <script language="javascript">
    var x = new ActiveXObject("HelloNS.Hello");
    alert(x.Message());
  </script>
</head>
<body>
</body>
</html>

Я сейчас читаю это на MSDN: http://msdn.microsoft.com/en-us/library/aa751970(VS.85).aspx

Если я выясню это, я опубликую результаты.

Ответы [ 2 ]

1 голос
/ 29 мая 2009

Dynamic Language Runtime (DLR) и усовершенствования взаимодействия, представленные в VS2010 и .NET 4.0, должны сделать это намного проще. Не требуется COM-взаимодействия, не требуется регистрация и т. Д. Вот Андерс Хейлсберг, описывающий, как это работает

Вы пробовали это на .NET 4.0? Бета доступны.

Я не уверен в последствиях безопасности доступа к веб-камере из браузера. Но перейти с Javascript на C # должно быть легко.

1 голос
/ 29 мая 2009

COM-объекты, когда создаются по имени, создаются с помощью регистрационной информации, хранящейся в реестре Windows. Даже если ваш элемент управления создан в .NET, он использует COM Interop для работы с браузером. Нет способа создать его по имени без предварительной регистрации на компьютере пользователя.

Возможно, вам удастся избежать какой-либо системы доставки типа ClickOnce, которая делает установку на клиенте простой, но во всех случаях она должна быть зарегистрирована.

...