Я новичок в VB.net. Я писал эти объекты на VB6 раньше. Я просто потерялся в VB.net, но (пинается и кричит) мне нужно научиться это делать. Я гуглил часами, сделав лишь незначительные шаги вперед. Может ли кто-нибудь опубликовать ссылку, объясняющую, как это сделать, от начала до конца?
Мне удалось написать объект класса. Я не могу сказать, как его зарегистрировать и откуда берутся name1 и name2 в CreateObject ("Name1.Name2").
Regsrv32 работать не будет. Он говорит «Точка входа не найден» и не регистрирует его. Также не могу закинуть в директорию Assemblies. Я читал что-то о команде regasm, которую кто-то использует, но, похоже, я тоже не могу заставить ее работать.
Спасибо заранее за любую помощь.





Вам нужно перейти в свойства библиотеки классов и выбрать опцию «Зарегистрироваться для COM-взаимодействия». Это сделает вашу сборку доступной для COM.
Вы хотите создать то, что называется Вызываемая оболочка COM (иначе CCW) для вашего .NET-компонента. В основном это влечет за собой настройку некоторых интерфейсов COM с некоторыми идентификаторами GUID и включение параметра «Регистрация для взаимодействия с COM» в свойствах проекта (как упоминалось) или использование regasm.exe.
Я предполагаю, что вы пытаетесь написать не COM-DLL, а скорее законченный проект, который вызывает различные подсборки, такие как VB6 EXE, вызывает ActiveX DLL. Если бы вы могли быть более конкретными в том, что вы пытаетесь сделать, это помогло бы мне лучше.
Несколько замечаний о сравнении VB.NET и VB6.
1) Для .NET только проектов регистрации нет. Если EXE или DLL ссылается на другую .NET DLL, единственное требование - это наличие DLL в родительском каталоге.
2) Вы можете выполнить регистрацию в стиле COM для приложений .NET, только зарегистрировав сборку .NET в GAC. Однако для этого есть несколько требований. Поищите в .NET GAC, и вы узнаете, как это сделать.
3) Вы можете настроить сборку .NET для использования COM, и в этом случае она будет работать по правилам COM, включая регистрацию в regsvr.
Вы найдете для проекта только для .NET, что №2 или №3 встречаются только в редких случаях. №1 будет применяться для 90% ваших сборок DLL. Это зависит от вашего проекта.
Обычно CreateObject позволяет использовать подключаемые модули или устанавливаемые библиотеки. .NET обрабатывает это через Reflection API. С помощью API отражения вы можете заглянуть в каталог, пройтись по каждой .NET DLL и посмотреть, что они собой представляют, и создать объекты из того, что вы найдете. Найдите .NET Reflection, чтобы прочитать об этом.
Если ваш проект является только .NET, я рекомендую вам создать сборку, на которую ссылаются как основная сборка, так и отдельная подсборка, определяющая интерфейсы создаваемых вами объектов. Это, когда вы используете API отражения и определяете тип объекта, вы можете назначить его переменной этого интерфейса и нормально кодировать с помощью intellisense и других вспомогательных средств.
если у вас есть старые элементы управления ActiveX COM или библиотеки DLL. .NET создаст класс-оболочку, который предоставляет .NET объекты ActiveX. Я бы потратил некоторое время на изучение того, как .NET это делает. Я создаю фиктивный проект и имею ссылку на .NET ActiveX, который мне нужен. Затем я нахожу проекты оболочки и созданную DLL и перемещаю их в центральную область. Вот почему, когда я работаю над последующими проектами с использованием того же материала ActiveX, я знаю, где находятся все обертки.
Я не говорил о COM-взаимодействии. Но разные способы, которыми .NET может делиться сборками. Вы предполагаете, что спрашивающий говорил о COM. Мой ответ не предполагает, что здесь основное внимание уделяется бесчисленным способам совместного использования сборок .NET.
Вам нужно установить нет в GAC для взаимодействия. Regasm с переключателем кодовой базы позволит вам размещать за пределами GAC.