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