c++ - Windows Embedded Compact 7 上的意外 IConnectionPointImpl::Unadvise 调用
问题描述
我们有一个更大的软件在 Win CE6 上运行,没有问题。核心功能在提供连接点的 COM 服务器 DLL 中实现。COM 客户端程序在程序启动时为连接点注册事件处理程序以获取状态通知等。在程序退出时,它通过调用相应的IConnectionPointImpl::Unadvise
方法取消注册处理程序。
现在,我们正在移植程序以在 Win EC 7 上运行。Win EC 7 的新板支持包 (BSP) 运行良好。还有具有不同选项的不同版本,在不同时间使用来自 Microsoft 的不同来源创建,但我们的软件总是显示相同的问题。
在程序启动时,启动后约 10 秒,IConnectionPointImpl::Unadvise
在所有注册的事件处理程序上被意外调用。我们的源代码中只有一个方法可以调用IConnectionPointImpl::Unadvise
,而且绝对不会执行。
问题出现〜95%,但有时程序启动并运行没有问题。由于程序的大小,我们不能使用调试器,性能很差。
我们猜测,COM 运行时调用这些IConnectionPointImpl::Unadvise
方法是出于某种原因。但我们不知道如何防止这种情况。
有没有人观察到同样的问题?是否有可用的解决方案/解决方法?谢谢。
解决方案
所以我们终于找到了解决这个问题的方法。
我们删除了对的依赖,MarshalByReObject
并将其替换为ISerializable
.
这允许我们在自定义 AppDomain 中正确加载,我们的程序集和事件不再松散。
但这对加载程序集和配置文件的路径有副作用。为了解决这个问题,我们还实现了一个AppDomain.AssemblyResolve
允许我们将加载重定向到适当位置的事件。
我希望这可以帮助你;)
推荐阅读
- php - Wordpress - 当其他用户喜欢他们的帖子时向用户发送电子邮件
- android - 打开新屏幕后返回屏幕时重新出现 LiveData 值
- javascript - array_contains 查询对象
- python-3.7 - 需要帮助将网页处理为文件,然后再将文件与网页进行比较以确定是否发生了更改
- apache-kafka - KSQL:左连接不等于条件不满足结果
- regex - 我在使用正则表达式从数据集中删除一些符号时遇到问题。符号如 - ,
- python - 用于展平列表的 Python 计数器元素
- php - 将 FFMpeg 与纯 php 和共享主机一起使用
- reactjs - 如何在 react/redux 中绑定到没有状态的文本字段
- bash - awk:查找多个字符串并打印出来