Сделать DLL COM доступной - PullRequest
7 голосов
/ 27 июля 2010

У меня есть библиотека классов, написанная на .Net, которую я хотел бы сделать доступной для VB6 / VBA. То, что я попробовал, не сработало (очевидно, так как я задаю этот вопрос). Вот что я сделал:

  1. Я создал проект библиотеки классов в Visual Studio 2010 Express и поместил код в модуль класса.
  2. Я открыл свойства проекта, зашел в «Информация о сборке» и проверил «Сделать COM видимым».
  3. Я перешел к опциям «Advanced Compile» и нацелился на .Net 2.0 (это очень простой код).
  4. Затем я удалил все ожидаемые ссылки для «Система».
  5. Я собрал проект (без предупреждений и ошибок) и скопировал DLL из папки Bin в C: \ Windows \ System32 \
  6. Я запустил RegSvr32 для регистрации DLL и получил ошибку:

Модуль "MyDll.dll" был загружен, но точка входа DLLRegisterServer не найдена.

Убедитесь, что «MyDll.dll является допустимым файлом DLL или OCX», и повторите попытку.

Очевидно, моя первая попытка была немного наивной. Может ли кто-нибудь предложить руководство?

Ответы [ 4 ]

10 голосов
/ 27 июля 2010

Шаг № 6 неверен. Сборки .NET с типами [ComVisible] регистрируются в Regasm.exe. Используйте параметр командной строки / codebase, если вы не хотите устанавливать DLL в GAC. Параметр командной строки / tlb создает библиотеку типов, которую вы можете использовать в своем проекте VB6.

3 голосов
/ 27 июля 2010

Вам нужно будет определить GUID для ваших интерфейсов и отметить, какие классы реализуют какие интерфейсы для запуска.MSDN имеет руководство по началу работы .Вам не нужно запускать RegSvr32, но вам нужно поместить DLL куда-нибудь , где приложение сможет найти ее :

После регистрации сборки с помощью Regasm.exe выМожно установить его в глобальном кэше сборок, чтобы его можно было активировать с любого COM-клиента.Если сборка будет активирована только одним приложением, вы можете поместить ее в каталог этого приложения.

Здесь также есть хороший обзор всего процесса здесь .

0 голосов
/ 29 января 2015

Используйте GacUtil вместо RegSvr32.RegSvr используется для DLL, созданных с помощью VB6, и для .NET DLL вам нужно использовать GacUtil, поскольку он добавляется в глобальный кеш сборок.

0 голосов
/ 27 июля 2010

Я вполне уверен, RegSvr32 работает только на не .NET DLL.Сборки .NET хранятся в глобальном кэше сборок (GAC).Вы должны запустить gacutil.exe.

...