|
对 PInvoke 函数“WebBrowser.WebBrowser::InternetGetCookieEx”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
用了站长提供的获取cookie的这段代码后老是报上面这个错误,在网上看了解决办法是申明API时加上这个属性CallingConvention=CallingConvention.Cdecl,可是加上后还是报这个错,请问站长怎么解决呢,是申明 api时的数据类型不对吗,这个stringbuilder感觉 有点奇怪
我是在OnDocumentCompleted事件里调用 的这个aPi
//取当前webBrowser登录后的Cookie值
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref int pcchCookieData, int dwFlags, object lpReserved);
//取出Cookie,当登录后才能取
private static string GetCookieString(string url)
{
// Determine the size of the cookie
int datasize = 256;
StringBuilder cookieData = new StringBuilder(datasize);
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
{
if (datasize < 0)
return null;
// Allocate stringbuilder large enough to hold the cookie
cookieData = new StringBuilder(datasize);
if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, null))
return null;
}
return cookieData.ToString();
}
|
|