#c# #.net #com #vb6
#c# #.net #com #vb6
Вопрос:
У меня есть сборка адаптера c # вокруг неподписанной сторонней сборки, поэтому я также не могу подписать свою сборку. Моя сборка адаптера должна использоваться программой VB6 для доступа к функциям сторонней сборки, которая не является COM. Однако, хотя я могу зарегистрировать сборку с помощью regasm, сгенерировать файл tlb и ссылаться на него в VB6, я получаю исключение ActiveX при попытке установить для моей переменной Dimmed значение нового экземпляра моего адаптера.
У меня есть соответствующий .Установлены Net framework, и я могу запустить мою сборку адаптера из командной строки через другой исполняемый файл .Net на компьютере, на котором установлен VB6.
Вот как я настраиваю свой COM, без ссылки на стороннюю ссылку .. на всякий случай, если это проблема..
[ComVisible(true)]
[Guid("F728D70E-ED98-456C-B8C6-4EA5B0EF8A1A")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("SimpleComClass452.MySimpleComClass")]
public class MySimpleComClass : _MySimpleComClass
{
public int Add(int num1, int num2)
{
return num1 num2;
}
}
[ComVisible(true)]
[Guid("C729E6FF-C2F5-4C9B-8200-A135E15576A6")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface _MySimpleComClass
{
[DispId(1)]
int Add(int num1, int num2);
}
Как я могу разобраться в проблемах с доступом к моей сборке адаптера с поддержкой .NET COM из VB6? Я смотрел на procmon, но ничего не вижу.
Есть ли какой-либо способ выяснить, в чем заключаются проблемы?
Комментарии:
1. Имеют ли c # dll и код vb6 одинаковую разрядность? Например, 32-разрядный код не может использовать 64-разрядный COM-объект
2. Какую ошибку вы получаете в VB6?
3. Строгое именование AFAIK вообще не влияет на COM-взаимодействие VB6. По крайней мере, я выполняю много COM-взаимодействий (VB6 вызывает C #) и ничего не подписываю.
4. Можете ли вы опубликовать код VB6 и конкретно указать, какая строка выдает вам какую ошибку?
5. IIRC, если вы хотите установить свою сборку COM-взаимодействия в GAC, то у нее должно быть строгое имя. Но если вы просто зарегистрируете его повторно, вы сможете создать его экземпляр. Когда вы запускаете IDE, вам может потребоваться поместить копию вашей сборки в ту же папку, что и vb6.exe (обычно C:Program FilesMicrosoft Visual StudioVB98).
Ответ №1:
@Renat назвал это в комментариях к исходному сообщению.
Перекомпилирован в VS2019 как явно 32-разрядный и заменен на использование x86 regasm в C:WindowsMicrosoft.NetFrameworkregasm.exe на целевой машине.
Я использую 64-разрядную ОС (Windows 2012 r2) для запуска VB6 на целевой машине, но она все равно будет компилироваться в сборку x86.
Так что я предполагаю, что урок — x86 для VB6, но я думаю, вы все это и так знали: S