加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 使用WinForm时激活上下文丢失了?

发布时间:2020-12-14 02:18:55 所属栏目:Windows 来源:网络整理
导读:我有一个应用程序,它使用隔离部署中的本机COM dll中的一些类. 简化: 在运行时,我将带有清单文件的dll下载到某个版本 目录没有注册. 然后我创建一个指向该目录的激活上下文 然后从dll创建类的实例. 让我们说创建A类并在B课之后. 在这个流程中一切顺利. 当我
我有一个应用程序,它使用隔离部署中的本机COM dll中的一些类.

简化:

>在运行时,我将带有清单文件的dll下载到某个版本
目录没有注册.
>然后我创建一个指向该目录的激活上下文
然后从dll创建类的实例.
>让我们说创建A类并在B课之后.

在这个流程中一切顺利.

当我将我的应用程序更改为WinForm时,问题就出现了.
当按下“按钮1”时,我像以前一样创建激活上下文,然后创建A类的实例.
这很好用,流程返回到我的WinForm.
但是当按下“按钮2”时,我无法创建B类.
我得到一个例外,说无法找到班级!

所以似乎WinForm以某种方式弄乱了我的激活上下文.

>为什么?那里发生了什么?
>周围有办法吗?

几点说明:

>我尝试使用sxstrace.exe执行激活上下文创建,但是它仅记录了我的激活上下文创建.
>我尝试评论出Application.EnableVisualStyles(),但它没有帮助.
>如果我使用create和destroy Activation将每个调用包装到我的dll,它可以工作,但我自然不想去那里…

解决方法

CLR不保证在传递托管代码时维护/保留Win32激活上下文.

解决方法是调用本机代码,在其中设置激活上下文,执行所需操作,然后还原上下文.您可能只需要它来加载和绑定到对象,所以一旦你有了IUnknown,你就可以返回它.

马丁

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读