RegAsm для библиотеки классов, используемой в приложении VB6 - PullRequest
4 голосов
/ 26 мая 2010

Короче говоря, я создал библиотеку классов C #, которая является одновременно COM-Visible и зарегистрирована для COM-взаимодействия. Я скомпилировал библиотеку, в результате чего были созданы файлы .dll и .tlb.

У меня есть другая машина, на которой запущено приложение VB6. Итак, я скопировал файлы .dll и .tlb в папку C: / Windows / system32 на машине. Затем я зарегистрировал эти файлы, используя следующее:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm C:\Windows\system32\TestClass.dll /tlb:TestClass.tlb

После успешной регистрации файлов я добавил ссылку на проект в файл Test.tlb из моего приложения VB6, а затем попытался вызвать метод в моем новом ссылочном классе, например так:

Dim myObject As TestNamespace.TestClass
Set myObject = New TestNamespace.TestClass
MsgBox (myObject.TestMethod())

Не работает, и я получаю -2147024894 Ошибка автоматизации.

Я читал, что не должен устанавливать dll в личную папку, такую ​​как system32. Я должен либо зарегистрироваться в GAC, либо я должен зарегистрироваться в другом месте, используя опцию "/ codebase":

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm C:\TestClass.dll /tlb:TestClass.tlb /codebase

Есть ли причина, по которой я не должен использовать system32? Прошлые разработчики, которые работали над этим проектом, поместили файлы сборки, используемые этим проектом VB6, в system32, и, похоже, проблем не было.

Когда я регистрирую свою DLL в папке system32, я получаю сообщение об ошибке автоматизации. Когда я регистрирую свою dll в другом месте (то есть C: /), вызов метода в мою библиотеку классов из VB6 работает как ожидалось. Что дает?

Я должен упомянуть, что мы НЕ будем использовать GAC для регистрации каких-либо библиотек DLL. Так оно и есть.

Любая помощь приветствуется.

Mike

1 Ответ

1 голос
/ 27 мая 2010

У меня не было проблем с использованием regasm для dll в system32. Я всегда использую ключ / Codebase, который помещает местоположение tlb в реестр, чтобы VB6 не запутался.

Подробнее см. На странице MSDN .

...