2011-01-12 12 views
5

我有一个应用程序使用来自独立部署中的本机COM DLL的一些类。使用WinForm时激活上下文丢失?

简体中文: 在运行时,我将它的清单文件下载到一个特定的目录,而无需注册它。 然后,我创建一个指向该目录的激活上下文,然后从dll创建类的实例。 让我们假设创建A类,并在B类之后。 在这个流程中一切顺利。

当我将应用程序更改为WinForm时,问题就开始了。 当按下“按钮1”时,我像之前一样创建激活上下文,然后创建A类的实例。 这很好,流程返回到我的WinForm。 但是,当按下“按钮2”时,我无法创建B类。 我收到一个异常,说无法找到该类!

所以看起来WinForm似乎搞乱了我的Activation上下文。 - 为什么?那里发生了什么? - 有没有办法解决它?

一些注意事项: - 我尝试使用sxstrace.exe来激活上下文创建,但它只记录了我的激活上下文创建。 - 我试着评论Application.EnableVisualStyles(),但它没有帮助。 - 如果我打包每个电话给我的DLL与创建和销毁激活上下文的作品,但很自然我不想到那里..

回答

1

CLR不保证通过时维护/保留Win32激活上下文托管代码。

解决方法是调用本地代码,在其中设置激活上下文,执行所需操作,然后恢复上下文。你可能只需要它来加载和绑定对象,所以一旦你有一个IUnknown,你可以返回它。

Martyn