2013-10-18 49 views
0

我的C#代碼有問題(我使用的是VS2010),我嘗試使用wininet.dll來使用它的FTP功能。該DLL是不是一個.NET組件,所以我沒能在添加作爲參考,而不是我用這個代碼,我在互聯網上看到,這裏的代碼:C#上使用VS2010的Wininet.dll錯誤

[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文件,我嘗試將該文件放在項目文件所在的文件夾中,但它沒有解決問題。希望你們能幫助我。提前致謝!

+0

你從哪裏複製的代碼?他們聲稱它有效嗎?你收到的完全例外是什麼? – CodeCaster

+0

我忘了複製鏈接,但我也在StackOverFlow中看到它,並且發佈問題的人說他的代碼正在工作(他有不同的問題,但他說他的代碼正在工作) – NickSharp

+0

它永遠不能工作,宣言是完全錯誤的。錯誤信息是不太可能的,它表示* extern *關鍵字缺失。聽起來就像你試圖在不支持pinvoke的平臺上這樣做。 FTP已經得到了.NET的很好的支持,不要自己動手。 –

回答

0

運行時可能無法找到該簽名的切入點,因爲根據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); 
+0

我嘗試根據你的答案更改代碼,但仍然出現錯誤 – NickSharp

+0

**什麼**錯誤? – CodeCaster

+0

以下是完整的錯誤消息: 無法從程序集'FTPDelete,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'加載類型'FTPDelete.Form1',因爲方法'InternetOpen'沒有實現(沒有RVA) 。注意:FTPDelete是解決方案名稱。 – NickSharp