Скажем, у нас есть существующий процесс (или приложение), который вызывает COM-объект из ocx-файла, такого как "MyCOMLibrary.ocx".
Есть ли способ написать библиотеку C # для точной репликации файла ocx? Чтобы исходное приложение могло вызывать ваш код C #, а не исходный объект COM?
Вы, конечно, должны будете использовать идентичные идентификаторы CLSID и ProgID в качестве исходного ocx. И при условии, что в подписи нет участия, такого как SNK в мире .Net.
Кроме того, существуют ли какие-либо инструменты для автоматизации этого? Что-то, что принимает ocx и выплевывает C # файл с методами для реализации.
РЕДАКТИРОВАТЬ: Я хочу добавить, что исходное приложение VB6, и не использует .Net вообще. Скорее всего, они загружают OCX, как приложение VB6 (ProgId или Guid). Это вызывает какие-либо проблемы?
У нас также нет проблем с полным переписыванием ocx - мы, скорее всего, просто вернем коды ошибок успеха для всех методов и будем использовать только методы / события, требуемые нашей ситуацией.
РЕДАКТИРОВАТЬ: Вы могли бы подумать, что это не будет слишком сложно сделать. Можем ли мы создать файл ocx VB6, который мог бы заменить старый ocx, и просто передать все вызовы сборке .Net?
РЕДАКТИРОВАТЬ: я пытался использовать следующую библиотеку с открытым исходным кодом: EasyHook
Но, похоже, этот вопрос все еще должен быть жизнеспособным. VB6, кажется, загружает COM-объекты таким образом, чтобы предотвратить перехват. Я не вижу способа перехватить методы экземпляра для класса / интерфейса или конструктора класса с помощью EasyHook.