RegAsm для библиотеки классов, используемой в приложении VB6
Короче говоря, я создал библиотеку классов C#, которая является одновременно COM-Visible и зарегистрирована для COM Interop. Я скомпилировал библиотеку, в результате чего были созданы файлы.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. Так оно и есть.
Любая помощь приветствуется.
Майк
1 ответ
У меня не было никаких проблем с использованием regasm для DLL в system32. Я всегда использую ключ /Codebase, который помещает местоположение tlb в реестр, чтобы VB6 не запутался.
Смотрите страницу MSDN для получения дополнительной информации.