如何引用urlmon.dll?

大狗狗 2009-08-21 03:15:21
我的环境: WindowsXP sp2 VS2005

项目中选择"引用-添加引用" 然后找到system32中的urlmon.dll,结果引用失败,错误提示如下:

未能添加对urlmon.dll的引用,这不是一个有效的程序集或COM组件,只有具有扩展名dll的程序集和COM组件才能被引用

运行 Regsvr32 urlmon.dll ,提示"urlmon.dll中的DLLRegisterServer成功"。然后再次试图引用urlmon.dll,错误依旧!!
重启机器也不行。

如果不能引用urlmon.dll,那么[DllImport("urlmon.dll")]是不是也会失效呢?我从中导入CoInternetGetSession,但每次执行RegisterNameSpace都报"System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"我怀疑根本就没能导入CoInternetGetSession。

请问如何引用urlmon.dll,你们机器上能添加对urlmon.dll的引用吗?

...全文
358 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
大狗狗 2009-09-06
  • 打赏
  • 举报
回复
问题已解决,其实我根本不需要添加对该DLL的引用,也许本来就不能添加。

事情本来是这样的:
http://topic.csdn.net/u/20090819/12/a560cf58-9f5c-48ba-a1f2-9104e58fb334.html?691882405
hao1hao2hao3 2009-08-21
  • 打赏
  • 举报
回复
你添加的DLL可能不是.NET写的
可能只是WIN32函数,如果是那样的话使用DllImport("urlmon.dll")
大狗狗 2009-08-21
  • 打赏
  • 举报
回复
[DllImport("urlmon.dll")]
private static extern void CoInternetGetSession(uint sessionMode,
ref IInternetSession session, uint reserved);


public void Register()
{
IInternetSession session = null;
CoInternetGetSession(0, ref session, 0);
Guid guid = new Guid("EFA14C17-7854-4fe2-AF94-856A9714A7B7");
session.RegisterNameSpace(new MhtHandler(), ref guid, "InfiKeeper", 0, null, 0);
}


实在看不出哪有问题,是不是我的MhtHandler类有问题?
dancingbit 2009-08-21
  • 打赏
  • 举报
回复
这样的DLL是不能通过添加引用的方式导入的,只能使用DllImport导入其中的方法。至于后面的出错,则是内存访问冲突,多半是传递参数的方式有问题。
大狗狗 2009-08-21
  • 打赏
  • 举报
回复
注:上面有意思不清楚地方,我不是说即引用urlmon.dll,又执行[DllImport("urlmon.dll")]。我意思是如果无法引用urlmon.dll,那我换用[DllImport("urlmon.dll")]是不是也失败?

111,098

社区成员

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

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

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