.Net中COM组件兼容性的问题
最近在.NET中使用iOffice OWC组件时,不小心碰到了Com组件兼容性的问题,以前没有注意到相关问题,昨天查了些资料暂时将这个问题解决了。
![](/Emoticons/shades_smile.gif)
方法一:在使用组建的页面添加<%@ Page aspcompat=true %> |
由 Visual Basic 6.0 等早期生成的 COM 组件调用了单线程运行单元(STA)。为了避免 ASP.NET 产生兼容性错误,我们可以在 <%@ page > 标记里设置 aspcompat 属性,以指示 ASP.NET 在 ASP 兼容模式下执行它。如果不以这种方式执行会出现安全错误。 |
如果将此标记的值设为 true,还可以调用COM+1.0组建,但是这种方式性能会稍微有些下降。 方法二:NET 框架 SDK 在文件 Tlbimp.exe 中附带了一个名为类型库导入程序 (TlbImp) 的实用工具,该工具通过围绕组件生成托管包装将 DLL 文件中的标准 COM 组件转换为等效的 .NET 框架程序集。转换后的组件可以早期绑定到托管代码以获得显著提高的性能。 这个方法应该是可以的,但是还没有去实验。 |
需要注意的是使用 Interop Assembly 时,虽然 ASP.NET 本身无法判断 COM 组件是否调用 STA,但是通过 aspcompat 属性可以避免由于 STA 引起的效率过低或者死锁。 |