Создайте ActiveX.exe, используя .Net 4 и VS2010 - PullRequest
3 голосов
/ 29 мая 2011

Мое приложение - приложение vb6, которое ссылается на файл delphi active.exe.Мне нужно заменить этот файл на C # один.Как я могу создать ActiveX EXE с VS 2010 и C #?

(само собой разумеется, я не могу работать с файлами, отличными от ActiveX EXE)

Ответы [ 2 ]

2 голосов
/ 29 мая 2011

Microsoft предлагает руководство по переносу VB6 ActiveX EXE в .NET .В нем конкретно говорится:

мастер обновления Visual Basic 2005 не поддерживает обновление EXE-файлов Visual Basic 6 ActiveX

Поэтому инструменты Microsoft, по крайней мере, не поддерживают созданиеActiveX EXE из .NET на основе оригинального кода VB6.(Это не означает, что другой маршрут может быть невозможен.)

Альтернативный подход может состоять в том, чтобы преобразовать его в обычную DLL-библиотеку .NET COM Interop, что намного проще, но может потребоваться, чтобы он закончилсяпроцесса, который не может сделать DLL.

0 голосов
/ 31 мая 2018

Насколько мне известно, VB6 ActiveX EXE был, по сути, внепроцессным COM-сервером.

(Могут быть некоторые тонкости, которые означают, что это не совсем идентичные понятия, но я думаю, что это была основная идея).

Кажется, что существует несколько способов создания COM-серверов вне процесса из .NET. Этот другой вопрос имеет несколько хороших ответов .

Ниже приводится краткое изложение всех основных техник, о которых я читал.


[A] Один из подходов заключается в использовании «суррогатного» процесса для размещения DLL . Обратите внимание, что это похоже на методику перекрестных вызовов между 32-разрядными и 64-разрядными.

Из этой статьи Microsoft , описывающей один метод, ключевыми моментами являются:

  • Шаг 1. Создайте сборку .NET с COM-видимыми типами и интерфейсы

  • Шаг 2. Зарегистрируйте сборку .NET для COM-взаимодействия

  • Шаг 3. Установите сборку .NET в GAC

  • Шаг 4. Настройте Суррогатный процесс COM по умолчанию для вашей сборки

  • Шаг 5: Активируйте COM-объект с использованием CLSCTX_LOCAL_SERVER

Я думаю, что его шаги 4 и 5 действительно являются ключами к этому методу.


[B1] Второй подход заключается в создании " COM EXE-сервера, полностью реализованного в управляемом коде " с помощью ...

полностью преобразовывает сборку .NET EXE в локальный сервер COM выполнение всех требований такого сервера, как это предусмотрено Спецификации COM.

В нем говорится, что выполнение этого отвечает следующим требованиям и показан пример:

Предоставление класса фабрики классов (который реализует COM Интерфейс IClassFactory) для каждого класса .NET, который мы хотим экспортировать на COM.

Правильно вставить записи реестра для сборки EXE, включая ключ LocalServer32.

Правильно звонит CoRegisterClassObject () и CoRevokeClassObject () на этих фабриках классы.


[B2] Что-то вроде другой пример этого здесь . В нем говорится:

Пример демонстрирует внепроцессный COM-сервер в форме локальный сервер (EXE), который полностью реализован в Visual C #.

Это может отличаться некоторыми техническими деталями (я действительно не оценивал, насколько принципиально это могло бы быть.)


[C] Возможно, другой подход состоит в том, чтобы «создавать компоненты COM + с использованием System.EnterpriseServices.ServicedComponent» (что кратко описано в SO по этой ссылке 1083 *).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...