注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

飞天心宏的博客

依稀旧梦似曾见,相逢只恨缘太迟

 
 
 

日志

 
 
关于我

出身数学,爱好文学,从事软件开发工作。一个阳光、幽默、热爱生活的男孩子,在追求理想的路上风雨无阻,勇往直前,崇尚“梦想有多远,我们就走多远”!

网易考拉推荐

解决:对 PInvoke 函数的调用导致堆栈不对称问题  

2012-07-03 15:46:41|  分类: 常见问题解决方法 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

问题描述:

       在使用托管代码调用非托管代码时,发生“对 PInvoke 函数“UseTwiHikVisionDllTest!UseTwiHikVisionDllTest.TwiHikVision::GetFirstPic”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

解决方法:

     添加属性:CallingConvention=CallingConvention.Cdecl
如:
        [DllImport("TwiHikVision.dll", EntryPoint="GetFirstPic",CallingConvention=CallingConvention.Cdecl)]
        public static extern string GetFirstPic(string videoFileName, string exportFilePath);
 
解决:对 PInvoke 函数的调用导致堆栈不对称问题 - 飞天心宏 - 飞天心宏的博客
 
 
网络参考可能原因:

You need to set the calling convention. The default convention (stdcall) is not correct, which will cause P/Invoke stack imbalances.

For example, your first call should look like:

[DllImport("Service.dll", CallingConvention=CallingConvention.Cdecl)]  static private extern IntPtr CallCreateClass();

By default, C and C++ use cdecl - but marshalling uses stdcall to match the Windows API.

 

 

 

 

                                                   飞天心宏  2012-07-03

 

  评论这张
 
阅读(13015)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017