2012-04-16 23 views
6

我目前正在使用Csharp獲取cookie數據。 我使用DLLImport來調用Wininet.dll中的InternetGetCookie,但是當我嘗試它時,函數返回一個ERROR_INSUFFICIENT_BUFFER(錯誤代碼122)。Wininet InternetGetCookie獲取空cookie數據

任何人都可以幫助我嗎?

這是dll引用的代碼:

[DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto, EntryPoint="InternetGetCookie")] 
     public static extern bool InternetGetCookie(string lpszUrl, string lpszCookieName, 
      ref StringBuilder lpszCookieData, ref int lpdwSize); 

這是我如何調用該函數:

InternetGetCookie("http://example.com", null, ref lpszCookieData, ref size) 

感謝。

回答

9

返回值告訴您,您提供給該函數的緩衝區不夠大,無法包含要返回的數據。你需要調用InternetGetCookie兩次:一次傳入0的大小,找出緩衝區應該有多大;並第二次,與正確的大小的緩衝區。

此外,P/Invoke簽名是錯誤的; StringBuilder不應該是參數ref(並且EntryPoint參數錯誤,因爲它沒有指定正確的入口點名稱)。

聲明函數是這樣的:

[DllImport("wininet.dll", SetLastError = true)] 
public static extern bool InternetGetCookie(string lpszUrl, string lpszCookieName, 
    StringBuilder lpszCookieData, ref int lpdwSize); 

然後調用它像這樣:

// find out how big a buffer is needed 
int size = 0; 
InternetGetCookie("http://example.com", null, null, ref size); 

// create buffer of correct size 
StringBuilder lpszCookieData = new StringBuilder(size); 
InternetGetCookie("http://example.com", null, lpszCookieData, ref size); 

// get cookie 
string cookie = lpszCookieData.ToString(); 
+0

天啊,真是一個可怕的API:d但感謝,我需要這一點。 – TheSHEEEP 2012-04-16 14:25:02