2012-04-16 13 views
6

मैं वर्तमान में Csharp के साथ कुकी डेटा प्राप्त करने पर काम कर रहा हूं। मैं wininet.dll में InternetGetCookie को आमंत्रित करने के लिए DLLImport का उपयोग कर रहा हूं, लेकिन जब मैं इसे आज़माता हूं तो फ़ंक्शन एक ERROR_INSUFFICIENT_BUFFER (त्रुटि कोड 122) देता है।Wininet InternetGetCookie खाली कुकी डेटा प्राप्त करता है

क्या कोई इस से मेरी सहायता कर सकता है?

यह 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 के आकार में गुजरने के लिए, यह पता लगाने के लिए कि बफर कितना बड़ा होना चाहिए; और दूसरी बार, सही आकार के बफर के साथ।

इसके अतिरिक्त, पी/आमंत्रण हस्ताक्षर गलत है; StringBuilderref पैरामीटर नहीं होना चाहिए (और 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

मेरे भगवान, क्या एक भयानक एपीआई: डी लेकिन धन्यवाद, मैं की जरूरत है कि, भी। – TheSHEEEP