Короче говоря, я создал библиотеку классов 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