mshtml的诡异,只在我机器能用,别人机都不行,能搞定的另开贴给100分!

恶猫 2008-11-21 03:09:05
1 public void AddItem(mshtml.IHTMLElement item)
2 {
3 if (item.tagName == "A")
4 {
5 MessageBox.Show("0_" + item.tagName);
6 mshtml.HTMLAnchorElementClass dd = item as mshtml.HTMLAnchorElementClass;
7 if (dd != null)
8 {
9 MessageBox.Show("1");
10 if (dd.href != null)
11 {
12 MessageBox.Show("2");
13 string hrefs = dd.href;
.................................................................
这是主要出错代码.
经过一点一点测试..出错行是 6行. 这名本身没错,但是dd的值却是null
在我本机,dd!=null 但是在别人电脑上,以及我的虚拟机里,dd==null

晕了,这是为啥??????

能解决的,另开贴送100分.(我经常用C#,winform,webBrowser,mshtml,欢迎同道朋友交流)

也欢迎玩C#,asp.net的进群交流..QQ.23559055 QQ群;5347943
...全文
341 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
恶猫 2008-11-25
  • 打赏
  • 举报
回复
哎.搞定了.
收工.
空心兜兜 2008-11-24
  • 打赏
  • 举报
回复
确实应该是系统文件问题
恶猫 2008-11-24
  • 打赏
  • 举报
回复
查了一些资料,还是没搞定.
cnblog上有一个蜡人张的文章.
http://www.cnblogs.com/waxdoll/archive/2005/04/08/134196.html

COM/DLL 重定向.也不行.哎.

我要疯掉了!!!!!

mshtml应该是vs在安装的时候自动安装+注册的.

可是手工怎样?

我先 gacutil /i xx.dll
又 regasm xxx.dll

再运行程序还是不行.我晕啊
啊兵 2008-11-24
  • 打赏
  • 举报
回复
很深,向楼主学习
byte377 2008-11-24
  • 打赏
  • 举报
回复
大哥你是怎么搞定的呢??
恶猫 2008-11-24
  • 打赏
  • 举报
回复
朋友说我的这个是因为 item 是一个非法指针.

可是为啥 在VS里运行就没事啊
恶猫 2008-11-24
  • 打赏
  • 举报
回复
RegASM.exe可以生成PIA文件的REG信息.


在目标机上 gacutil先添加程序集
然后 regasm安装
最后 添加reg信息

-=-=======------------------==========================================

单独运行总是出错

在VS里运行绝对的没错.哎!!!!!
恶猫 2008-11-24
  • 打赏
  • 举报
回复
这个问题自己搞定了.....

新问题来:

运行N次...会有N/2次出错.几乎是一半一半.

string hrefs = "";
try
{
hrefs = dd.href;
}
catch(Exception ex)

这里.递归取得所有的链接对象.

可是 在这赋值的时候,出错就提示;尝试读取或写入受保护的内存.

但是!!!!!!!!!!!!!!最奇怪的.
在vs2005里直接RUN,是100%无错误.点几十次获取链接按钮,都没错.

可是单独运行的话,就会一半一半机会的错.

这是为啥?如何避免?????

恶猫 2008-11-23
  • 打赏
  • 举报
回复
回楼上楼上:当然是带上DLL文件拉.

可是一样不行.
恶猫 2008-11-23
  • 打赏
  • 举报
回复
不是..类型还是 System.__ComObject

我用VBA那个GETTYPE.取得真实类型是 DispHTMLAnchorElement

但是死活转不成 HTMLAnchorElementClass
gzqibang 2008-11-23
  • 打赏
  • 举报
回复
在别的机器上安装你的程序时同时把这个Microsoft.mshtml.dll带上,试下,因为有可能是安装机器同你的开发机器的版本不一样。
恶猫 2008-11-23
  • 打赏
  • 举报
回复
兄弟,我试过了.安装过了.还是不行的.

安装了PIA后..类型不是 System.__ComObject了.而是 DispHTMLAnchorElement

汗,继续找答案中
lextm 2008-11-23
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/en-us/library/aax7sdch.aspx
官方的解答了。
恶猫 2008-11-23
  • 打赏
  • 举报
回复
你好,高手!!!

我用gacutil.exe 安装了mshtml那个程序集也不行...

文件拷贝到文件的文件夹里,也不行.没用到它的模块都正常.一用到就完了.

这个要怎样装上?

麻烦说详细一点好吗.急死我了
lextm 2008-11-22
  • 打赏
  • 举报
回复
原因很简单,mshtml.dll这个东西不是每个机器都有的。作为Primary Interop Assemblies中的一个,这个库只在一些安装了Office或者某些SDK的机器上面才有。如果你确实依赖这个库,建议把PIA的安装包带上。
恶猫 2008-11-21
  • 打赏
  • 举报
回复
在我机器 item.GetType().ToString() 的显示是:mshtml.HTMLAnchorElementClass

而在别人的机器以及我的虚拟机里则是: System.__COMObjet

一模一样的代码,都是XP

只是我的机器是开发用的,装了不少东西.

而虚拟机是新装的XP.只有.net 2.0 framework

为啥??
恶猫 2008-11-21
  • 打赏
  • 举报
回复
现在最主要的一个现象::::::::::::::::::::::::::

在循环web内所有对象的时候。

if(tagName=="A" 的时候。。确认是链接对象了

可是在我机器 item.GetType().ToString() 的显示是:mshtml.HTMLAnchorElementClass

而在别人的机器以及我的虚拟机里则是: System.__COMObjet

一模一样的代码,都是XP

只是我的机器是开发用的,装了不少东西.

而虚拟机是新装的XP.只有.net 2.0 framework

为啥??解决这个,应该就没问题了
恶猫 2008-11-21
  • 打赏
  • 举报
回复
哎..是没人会,还是不屑帮忙?

我自己搞好了这个了,改用 IHTMLAnchorElement 就不会null了.

但是访问href属性的时候,会时不时出错.

真烦.

有的机器好使,有的不好使.

怀疑这个是.net2.0的bug.....但下载了一个fix,没起作用..唉.

具体错误是:内存只读

110,555

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧