Jul*_*les 7 .net mshtml webbrowser-control internet-explorer-9
我想使用mshtml.dll 9.0版的一些新功能,如IHTMLCSSRule.
以下文件夹中的互操作版本是版本7.0.3300.1:
C:\ Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll
以下文件夹中的COM版本是版本9.0.8112.16441:
C:\ WINDOWS\SYSTEM32\Mshtml.dll中
从我可以从网上确定,我应该这样做来创建一个.NET互操作版本9:
d:\ zTemp> tlbimp mshtml.tlb /out:Microsoft.mshtml.dll/namespace:mshtml/asmversi on:9.0
这似乎有效,但产生了以下警告:
TlbImp:警告TI3001:主互操作程序集'Microsoft.mshtml,Version = 7.0.3300.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'已经注册了类型库'C:\ Windows\system32\mshtml.tlb'.TLBIMP
:警告TI3016:类型库导入程序无法转换成员'mshtml._userBITMAP.pBuffer'的签名.TlbImp:
警告TI3016:类型库导入程序无法转换成员'mshtml._FLAGGED_BYTE_BLOB.abData'的签名.TlbImp:
警告TI3015:运行时封送程序无法对"mshtml.ICanvasPixel ArrayData.GetBufferPointer"中的至少一个参数进行封送处理.因此,这些参数将作为指针传递,并且可能需要不安全的代码来进行操作.TlbImp:导入到d:\ zTemp\Microsoft.mshtml.dll的类型库
'Microsoft.mshtml.dll'或其依赖项之一需要.Net Framework的更高版本而不是项目中指定的版本...
既然这是一个警告,让我以任何方式添加引用,我仍然可以使用.NET 3.5中的.dll的某些功能吗?
谢谢
这些都是 COM 版本控制的危险,又名 DLL Hell。您在 GAC 中安装的 PIA 是最小公分母,它使您的代码可以与任何版本的 IE 6 及更高版本一起使用。你的方法在其他方面是合理的。警告是真实的,您不能使用来自脚本语言或依赖 COM 自动化的任何其他客户端的标记成员。只要不使用它们就可以避免麻烦,这并不困难。
添加引用时出现错误,因为您使用了错误版本的 Tlbimp.exe。从错误消息来看,可能是.NET 4版本。3.5兼容版本位于c:\program files\microsoft sdks\windows\v6.0a\bin。否则,您将在使用 VS2008 命令提示符时得到该提示符。where tlbimp.exe通过在命令提示符下键入进行验证。
您可能会加载 PIA 而不是自定义互操作程序集。不确定,您可以从 Fuslogvw.exe 看出,配置为记录所有绑定。你的 /asmversion 应该避免它。最好创建一个完全伪造的版本号,这样它就永远无法匹配 PIA 版本,例如 1.0.0.0
当然,如果用户的计算机没有安装 IE9,您的程序将无法在该计算机上运行。