Используя VS 2008 (vb.net) мне нужно создать объект, который я могу использовать в классическом ASP с CreateObject - PullRequest
1 голос
/ 09 ноября 2008

Я очень новичок в VB.net. Я написал эти объекты в VB6 раньше. Я просто потерялся в VB.net, но (пиная и крича) я должен научиться делать это. Я часами гуглял с небольшими шагами вперед. Кто-нибудь может опубликовать ссылку, объясняющую начало и конец, как это сделать?

Мне удалось написать объект класса. Что я не могу сказать, так это как его зарегистрировать и откуда взялись name1 и name2 в CreateObject ("Name1.Name2").

Regsrv32 не будет работать. Оно говорит «Точка входа не найдена» и не регистрирует его. Также я не могу уронить его в каталог сборок. Я прочитал кое-что о команде regasm, которую я использую, но я не могу заставить ее работать.

Заранее благодарим за любую помощь.

Ответы [ 3 ]

2 голосов
/ 10 ноября 2008

Я собираюсь предположить, что вы не пытаетесь написать 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. С помощью Reflection API вы можете просмотреть каталог, просмотреть каждую .NET DLL, посмотреть, что они, и создать объекты из того, что вы найдете. Ищите .NET Reflection, чтобы прочитать об этом.

Если ваш проект - только .NET, то я рекомендую вам создать сборку, на которую ссылаются как основная сборка, так и отдельная сборочная сборка, которые определяют интерфейсы создаваемых вами объектов. В этом случае, когда вы используете API отражения и определяете тип объекта, вы можете назначить его переменной этого интерфейса и кодировать его с помощью intellisense и других вспомогательных средств.

если у вас старые COM ActiveX Controls или DLL, .NET сгенерирует класс-оболочку, который выставляет объекты ActiveX для .NET. Я бы потратил некоторое время на изучение того, как .NET делает это. То, что я делаю, создает фиктивный проект, и .NET ссылается на нужные мне элементы ActiveX. Затем я нахожу проекты оболочки и DLL, которые он сделал, и перемещаю их в центральную область. Поэтому, когда я работаю над последующими проектами, использующими те же самые элементы ActiveX, я знаю, где находятся все оболочки.

1 голос
/ 09 ноября 2008

Вам нужно перейти в свойства вашей библиотеки классов и выбрать опцию «Зарегистрироваться для взаимодействия COM». Это сделает вашу сборку доступной для COM.

0 голосов
/ 09 ноября 2008

Вы хотите создать так называемый COM Callable Wrapper (он же CCW) для вашего компонента .NET. Это в основном влечет за собой настройку некоторых интерфейсов COM с некоторыми GUID и включение «Регистрация для взаимодействия COM» в свойствах проекта (как уже упоминалось) или использование regasm.exe.

...