У нас большое приложение vb6, и, когда нам нужно что-то изменить / исправить, мы перемещаем разделы в .net, ориентируясь на фреймворк 2.0. Мы переместили несколько классов в .net dll, и они правильно настроены для доступа к com.
Вот проблема: MainAppVB6.exe создает экземпляр DOTNET_COM.ComClass. Он передает это методу в другой .net dll, который передает его через домен приложения. Это не проблема для COM-объектов, написанных в vb6.
.net видит границу домена приложения и хочет, чтобы объекты были сериализуемыми или marshalbyref. Поскольку нам нужна часть .net для изменения данных, которые возвращаются в vb6, сериализуемый не работает. Если мы отметим классы в Inherits MarshalByRefObject, то получим «Этот удаленный прокси-сервер не имеет приемника каналов, что означает, что либо у сервера нет зарегистрированных каналов сервера, которые прослушивают, либо у приложения нет подходящего клиентского канала для связи с сервером».
Нет каналов - мы просто перебираем домен приложения в одной и той же dll. Похоже, что .net не рассматривает объект как COM, что он должен делать.
Если я удаляю и marshalbyref, и сериализуемые, все будет работать, только если объект com создан в vb6. Если функциональность .net в домене приложения создает объект и назначает его для передачи обратно в vb6, vb6 выдает мне ошибки автоматизации.
Очень уродливый клочок - сериализовать объект в новом домене приложения, отправить обратно xml и позволить десериализации vb6, но это кажется смешным.
У кого-нибудь есть идеи?
Спасибо.
Сет