【发布时间】:2010-10-20 08:53:47
【问题描述】:
我们有一个大型的 vb6 应用程序,并且由于我们需要更改/修复一些东西,我们正在将部分移动到 .net,以框架 2.0 为目标。我们已将一堆类移动到 .net dll 中,并且它们已正确设置以暴露给 com。
问题出在:MainAppVB6.exe 实例化了 DOTNET_COM.ComClass。它将这个传递给不同的.net dll 中的一个方法,该方法将它传递给一个appdomain。这对于用 vb6 编写的 COM 对象完全没有问题。
.net 查看 appdomain 边界,并希望对象可序列化或编组引用。由于我们需要 .net 部分来更改返回到 vb6 的数据,因此可序列化不起作用。如果我们在 Inherits MarshalByRefObject 标记类,那么我们会得到“这个远程代理没有通道接收器,这意味着服务器没有注册的服务器通道正在监听,或者应用程序没有合适的客户端通道与服务器通信”。
没有渠道——我们只是通过同一个 dll 中的一个应用程序域。 .net 似乎没有将对象视为 COM,它应该这样做。
如果我同时删除 marshalbyref 和可序列化,则只有当 com 对象由 vb6 实例化时才会起作用。如果 appdomain 中的 .net 功能创建对象并分配给以传回 vb6,vb6 会给我自动化错误。
一个很丑的kludge是序列化新appdomain中的对象,发回xml,然后让vb6反序列化,但这看起来很荒谬。
有人有什么想法吗?
谢谢。
赛斯
【问题讨论】: