Я наткнулся на это, пытаясь построить ActiveX dll
из старых (но все еще сохраняемых) VB6
exe project
(*) источников, чтобы выполнить некоторое тестирование с помощью COM / NET
взаимодействия.
(желаемый) вариант использования:
- Возьмите класс
VB6
с открытыми методами, получающими или возвращающими некоторую контрольную (например, CommonDialog
) ссылку - CompileЭтот класс в ActiveX DLL
- Создайте экземпляр этого класса через COM-взаимодействие из .NET и правильно вызывайте его методы
Короче говоря,Первая проблема заключается в том, что наличие в файле класса Visual Basic 6 ActiveX dll
чего-то вроде
Public Function bad_dlg() As CommonDialog
Set bad_dlg = Nothing
End Function
приводит к сбою компиляции (* *) со следующей ошибкой:
«Модули закрытых объектов нельзя использовать в модулях открытых объектов в качестве параметров или типов возврата для открытых процедур, в качестве открытых элементов данных или в качестве полей открытых пользовательских типов»
Следовательно,вопрос:
- действительно ли это невозможночтобы что-то вроде выше скомпилировалось и работало правильно?
- [ЕСЛИ НЕТ] Предположим, я изменяю все, чтобы возвращать и получать экземпляры типа
VB6
Object
- как я могу работать с таким экземпляром из.Net (вызов конкретных методов и т. Д.)
(*) - не ActiveX exe
, а просто "обычный"
(* *) при условии, что соответствующая .ocx
(«Microsoft Common Dialog Control 6.0 (SP6)», C: \ Windows \ system32 \ ComDlg32.OCX) указана
(* * *) единственной, котораяЯ нашел это Передача управления Ссылка на DLL