使用 VS2010 在 C# 上出现 Wininet.dll 错误

Posted

技术标签:

【中文标题】使用 VS2010 在 C# 上出现 Wininet.dll 错误【英文标题】:Wininet.dll Error on C# using VS2010 【发布时间】:2013-10-18 13:04:35 【问题描述】:

我的 C# 代码有问题(我使用的是 VS2010),我尝试使用 wininet.dll 来使用它的 FTP 功能。 DLL 不是 .NET 组件,所以我无法添加作为参考,而是使用我在互联网上看到的这段代码,代码如下:

[System.Runtime.InteropServices.DllImport("wininet.dll", CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
    extern public static long InternetOpen(
        string lpszAgent,
        long dwAccessType,
        string lpszProxyName,
        string lpszProxyBypass,
        long dwFlags);

我在保存和构建项目时没有遇到任何错误,但是当我尝试调试时收到错误,部分错误显示“Culture=neutral, PublicKeyToken=null”,因为方法“InternetOpen”没有实现(没有 RVA)。”

我认为错误是因为它看不到实际的wininet.dll文件,我尝试将文件放在项目文件所在的文件夹中,但没有解决问题。希望你们能帮助我。提前致谢!

【问题讨论】:

你从哪里复制代码?他们声称它有效吗?您收到的完整例外情况是什么? 我忘了复制链接,但我在 *** 中也看到了,发布问题的人说他的代码正在运行(他有一个不同的问题,但他说他的代码正在运行) 它永远无法工作,声明完全错误。该错误消息不太可能出现,它表示缺少 extern 关键字。听起来您正试图在根本不支持 pinvoke 的平台上执行此操作。 .NET 已经很好地支持了 FTP,不要自己动手。 Hans,谢谢,我认为这是可能的,但是如果我想在我的 4.0 项目中使用 dll 怎么办?如果 wininet 是非 .NET 组件,有什么办法吗? 【参考方案1】:

运行时可能找不到该签名的入口点,因为根据 P/Invoke.net,签名看起来像这样:

[DllImport("wininet.dll", SetLastError=true, CharSet=CharSet.Auto)]
static extern IntPtr InternetOpen(string lpszAgent, 
                                  int dwAccessType, 
                                  string lpszProxyName, 
                                  string lpszProxyBypass, 
                                  int dwFlags);

【讨论】:

我尝试根据你的回答改代码,但还是出现错误 这是完整的错误消息:无法从程序集 'FTPDelete,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null' 加载类型 'FTPDelete.Form1',因为方法 'InternetOpen' 没有实施(无 RVA)。注意:FTPDelete 是解决方案名称。

以上是关于使用 VS2010 在 C# 上出现 Wininet.dll 错误的主要内容,如果未能解决你的问题,请参考以下文章

halcon在vs2010 C#中 从工具箱拖动HWindowControl控件出现以下错误啥原因,怎么解决

我可以在我的开发机器上为 C# VS2010 项目使用哪种轻量级 SQL Server 类型?

vs2010中使用C#编写与ArcGIS Engine相关程序时提示错误,错误信息如下

C# VS2010 进入中断模式失败

c#用vs2010设计界面时怎么让设计的窗体最大化

在VS2010上运行控制台应用程序,出现这个问题: