C++ Windows Embedded Compact 7上意外的IConnectionPointImpl::Unadvise调用

C++ Windows Embedded Compact 7上意外的IConnectionPointImpl::Unadvise调用,c++,com,windows-ce,iconnectionpoint,C++,Com,Windows Ce,Iconnectionpoint,我们有一个更大的软件在WinCE6上运行,没有问题。核心功能在提供连接点的COM服务器DLL中实现。COM客户端程序在程序启动时为连接点注册事件处理程序,以获取状态通知等。在程序退出时,它通过调用相应的IConnectionPointImpl::Unadvise方法来注销处理程序 现在,我们正在移植程序以在WinEC7上运行。Win EC 7的新板支持包(BSP)运行良好。也有具有不同选项的不同版本,在不同的时间使用来自Microsoft的不同来源创建,但我们的软件总是显示相同的问题 在程序启动

我们有一个更大的软件在WinCE6上运行,没有问题。核心功能在提供连接点的COM服务器DLL中实现。COM客户端程序在程序启动时为连接点注册事件处理程序,以获取状态通知等。在程序退出时,它通过调用相应的
IConnectionPointImpl::Unadvise
方法来注销处理程序

现在,我们正在移植程序以在WinEC7上运行。Win EC 7的新板支持包(BSP)运行良好。也有具有不同选项的不同版本,在不同的时间使用来自Microsoft的不同来源创建,但我们的软件总是显示相同的问题

在程序启动时,在启动后约10秒,所有注册的事件处理程序都会意外调用
IConnectionPointImpl::Unadvise
。我们的源代码中只有一个方法调用
IConnectionPointImpl::Unadvise
,这肯定不会执行

问题出现在95%左右,但有时程序启动和运行时不会出现问题。我们不能使用调试器,因为程序的大小,性能非常差

我们猜测,COM运行时出于某些原因调用了
IConnectionPointImpl::Unadvise
方法。但我们不知道如何防止这种情况


有没有人注意到同样的问题?是否有可用的解决方案/解决方法?谢谢。

所以我们终于找到了解决这个问题的方法

我们删除了对
MarshallByReObject
的依赖,并用
ISerializable
的正确实现替换它

这使我们能够在自定义AppDomain中正确加载程序集和事件,不再松散

但这对加载配置文件的路径有副作用。为了解决这个问题,我们还实现了一个
AppDomain.AssemblyResolve
事件,它允许我们在适当的位置重定向加载


我希望这能帮助你;)

所以我们终于找到了解决这个问题的方法

我们删除了对
MarshallByReObject
的依赖,并用
ISerializable
的正确实现替换它

这使我们能够在自定义AppDomain中正确加载程序集和事件,不再松散

但这对加载配置文件的路径有副作用。为了解决这个问题,我们还实现了一个
AppDomain.AssemblyResolve
事件,它允许我们在适当的位置重定向加载


我希望这能帮助你;)

我在Win10上有几乎相同的问题。。。你找到解决方案了吗?@David:作为一种解决方案,我们用普通回调取代了COM连接点,这在CE 6、EC 7和2013上都可以正常工作。对于连接点问题本身,我们没有找到解决方案。Arf,我无法做到这一点。。。所以我们会继续搜索。如果我们找到了解决方案,我会把它放在这里;)谢谢你,祝你好运!我们终于找到了这个问题的根源。当我们在自定义AppDomain中使用此类时,它来自类上的
MarshalByReObject
继承。我们仍在搜索工作区。我在Win10上也有同样的问题。。。你找到解决方案了吗?@David:作为一种解决方案,我们用普通回调取代了COM连接点,这在CE 6、EC 7和2013上都可以正常工作。对于连接点问题本身,我们没有找到解决方案。Arf,我无法做到这一点。。。所以我们会继续搜索。如果我们找到了解决方案,我会把它放在这里;)谢谢你,祝你好运!我们终于找到了这个问题的根源。当我们在自定义AppDomain中使用此类时,它来自类上的
MarshalByReObject
继承。我们仍在寻找工作区。感谢您的代表,我们将尝试。感谢您的代表,我们将尝试。