Как мне вызвать .NET код (C # / vb.net) из vbScript?

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

10.12.2008 20:12:49
3 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

6
10.12.2008 21:32:33

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

5
10.12.2008 20:17:18

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


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

1
10.12.2008 20:23:28