Как мне вызвать .NET код (C # / vb.net) из vbScript? - PullRequest
6 голосов
/ 10 декабря 2008

Я представляю, что могу скомпилировать C # DLL и затем представить ее как COM-объект, чтобы он мог быть CreateObject'd из VBscript. Я просто не уверен, что шаги, необходимые для этого ...

Ответы [ 3 ]

6 голосов
/ 11 декабря 2008

Это может быть очень просто сделать. Но есть много мест, где это не так просто. Это во многом зависит от того, что ваш класс должен уметь делать, и от того, как вы собираетесь его развернуть.

Некоторые вопросы для рассмотрения:

  • Ваш класс должен иметь конструктор без параметров.
  • Он не может выставлять статические методы.
  • В порядке ли развертывание вашей COM DLL в глобальном кэше сборок? Если нет, вам нужно дать ему строгое имя и зарегистрировать его, используя regasm /codebase.
  • Вас волнует, какие GUID идентифицируют класс и его интерфейсы? Если нет, вы можете позволить regasm назначать их, но они будут отличаться каждый раз (и везде), когда класс зарегистрирован. Если вам нужно, чтобы идентификаторы GUID оставались неизменными при установке, вам необходимо пометить элементы атрибутом Guid.
  • Собираетесь ли вы использовать маршалинг типов данных по умолчанию между .NET и COM? Если нет, вам нужно пометить свойства и методы атрибутом MarshalAs.
  • Имеет ли значение для вас, какой интерфейс COM предоставляет ваш класс? Если это так, вам нужно иметь дело с атрибутом InterfaceType.
  • Нужно ли вашему классу повышать или реагировать на события? Если это так, то вы можете повлиять на то, как вы создадите интерфейс вашего класса.

Здесь есть очень хорошая (если не датированная) статья о COM-взаимодействии и .Net здесь . (Многие вещи, о которых говорится в статье, например, создание библиотек типов, теперь обрабатываются для вас автоматически.) И Документация Microsoft актуальна, но не настолько подробно.

5 голосов
/ 10 декабря 2008

Вы должны использовать утилиту regasm для регистрации сборки (так же, как вы делаете regsvr32 с COM-серверами). Тогда вы можете использовать его из COM. Убедитесь, что он установлен в GAC. Материал должен иметь [ComVisible(true)] для использования из COM.

1 голос
/ 10 декабря 2008

Для каждого проекта, который вы можете выбрать, есть опция «Доступ к COM». Затем, конечно, вы должны зарегистрировать сборку, чтобы использовать ее, но это все.


Мне пришлось немного поохотиться, чтобы найти его для C # (я привык к VB.Net), но вы можете найти этот вариант, дважды щелкнув по папке Properties в обозревателе решений, выбрав Application, а затем нажмите кнопку Assembly Information....

...