<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="PInvoke调用导致堆栈不对称" id="card1">
<p> 游客</p><p>
标题:PInvoke调用导致堆栈不对称<br/>
正文:<br/>
   对 PInvoke 函数&amp;ldquo;HTLib::Usb_DelHtFile&amp;rdquo;的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。把：[DllImport(&amp;quot;ht32dll.dll&amp;quot;)]public static extern long Usb_DelHtFile(string filename,long mIndex);改成：[DllImport(&amp;quot;ht32dll.dll&amp;quot;)]public static extern int Usb_DelHtFile(string filename, int mIndex);后来查阅网文（网址：http://hi.baidu.com/wzlv/blog/item/cfd09e189ebf320134fa41eb.html），把这个问题说的比较清楚，引述如下，备忘：从.NET1.1升级到.NET2.0时出现的PInvokeStackImbalance错误微软官方的解释(http://msdn2.microsoft.com/zh-cn/library/0htdy0k3.aspx)如果 CLR 检测到平台调用之后的堆栈深度与 DllImportAttribute 属性指定的调用约定中以及托管签名的参数声明中提供的预期堆栈深度不匹配，则将激活 PInvokeStackImbalance 托管调试助手 (MDA)。下面将举一个具体的例子PCCamera类(UserLib.Device.PCCamera摄像头类)在从.NET1.1升级到.NET2.0时出现的PInvokeStackImbalance错误:检测到 PInvokeStackImbalanceMessage: 对 PInvoke 函数&amp;ldquo;WindowsApplication1!UserLib.Device.PCCamera::SendMessage&amp;rdquo;的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=325&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=325&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=325&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=325&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=325&amp;Page=3">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=325">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=325">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>