当前位置: 首页 > news >正文

北京模板网站建设中国建设银行总行网站

北京模板网站建设,中国建设银行总行网站,石家庄 网站 科技,成都外贸seo本文介绍了使用.NET 4.0、3.5时#xff0c;UnmanagedFunctionPointer导致堆栈溢出的处理方法#xff0c;对大家解决问题具有一定的参考价值#xff0c;需要的朋友们下面随着小编来一起学习吧#xff01; 问题描述 我在带有try catch块的点击处理程序中有一个简单的函数。…本文介绍了使用.NET 4.0、3.5时UnmanagedFunctionPointer导致堆栈溢出的处理方法对大家解决问题具有一定的参考价值需要的朋友们下面随着小编来一起学习吧 问题描述 我在带有try catch块的点击处理程序中有一个简单的函数。如果我在此try catch块中抛出异常则它会成功捕获该异常。 如果在抛出异常之前对非托管DLL进行了调用则未处理该异常并且没被捕获。 什么是无用的DLL调用会破坏我的程序异常处理 如果我在调试模式下运行该程序即使未对所有异常都选中异常中断它仍会捕获异常。该应用程序不会崩溃并且可以按预期运行。 如果我以调试时启动的方式运行程序并在崩溃时单击debug则会收到以下错误消息 Stack cookie检测代码检测到基于堆栈的缓冲区溢出  编辑 看来堆栈溢出中断了异常处理 我附上了一个导致崩溃的简化程序。 ISOConnection _comm; //This is instantiated at another time in the same thread//C# test function that crashes when run without a debugger attached bool DoMagic() {try{//if I uncomment this line the exception becomes unhandled and cannot be caught//_comm.ConnectISO15765();throw new Exception();}catch (Exception ex){MessageBox.Show(Caught exception)}//Within ISOConnection class public void ConnectISO15765(){...lock(syncLock){uint returnCode J2534Interface.PassThruConnect((uint)DeviceId, (uint)ProtocolID.ISO15765, (uint)ConnectFlag.NONE, (uint)BaudRate.ISO15765, ref ChannelId);//C# UnmanagedFunctionPointer allocation code [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate uint PassThruConnect(uint deviceId, uint protocolId, uint flags, uint baudRate, ref uint channelId); public PassThruConnect Connect;[DllImport(kernel32.dll)] public static extern IntPtr LoadLibrary(string dllToLoad);m_pDll NativeMethods.LoadLibrary(path); ... pAddressOfFunctionToCall NativeMethods.GetProcAddress(m_pDll, PassThruConnect); if (pAddressOfFunctionToCall ! IntPtr.Zero)Connect (PassThruConnect)Marshal.GetDelegateForFunctionPointer(pAddressOfFunctionToCall,typeof(PassThruConnect));//C function declaration long PassThruConnect(unsigned long DeviceID, unsigned long ProtocolID, unsigned long Flags, unsigned long Baudrate, unsigned long *pChannelID); 更新 如果我使用以下命令替换对UnmanagedFunctionPointer PassThurConnect的调用则不会发生崩溃 [DllImport(op20pt32.dll, EntryPoint PassThruConnect, CallingConvention CallingConvention.Cdecl)] public static extern uint PassThruConnect2(uint deviceId, uint protocolId, uint flags, uint baudRate, ref uint channelId); 分配UnmanagedFunctionPointer时是否存在某些未执行的操作或执行不正确的操作会导致缺少 这个代码几周前似乎可以正常工作了这甚至更奇怪了。主要变化是try catch在另一个线程中而我没有使用locksyncLock。现在所有内容都在一个线程中但是在BackgroundWorker中运行时也发生了相同的崩溃。 UPDATE2问题半解决 好所以我一步一步地回滚了我的提交直到成功为止。改变的是我从.NET 3.5转到.NET 4.0  .NET 3.5不会崩溃无论是否连接调试器。如果未附加调试器则.NET 4.0崩溃。为了排除代码中的错误我只需删除日志的ConcurrentQueue我使用的唯一4.0功能然后将当前代码库转换回3.5就不会收到此错误。 要确保100是4.0的问题然后我将代码库从3.5转换回4.0并保留了ConcurrentQueue实际上只是更改了构建选项并进行了重建并且StackOverflow崩溃了又回来了。 我想使用4.0有什么想法可以调试此问题吗 编辑 .NET 4.6.1也崩溃 更新3http://codenition.blogspot.com.au/2010/05/pinvokestackimbalance-in-net-40i-beg .html 在.NET 3.5中显然pinvokestackimbalance基本上被忽略了所以问题仍然存在只是不会使我的应用程序崩溃。 添加以下代码t o当过渡回托管代码时App.Config导致.NET修复堆栈。性能稍有下降但可以解决问题。 虽然这确实可以解决问题但我想知道UnmanagedFunctionPointer出了什么问题从而导致了问题 configuration runtime NetFx40_PInvokeStackResilience enabled1/ 编辑此线程不是重复的另一个已删除...  推荐答案 好所以问题在于调用约定应该是StdCall而不是Cdecl  这是有道理的因为通用J2534 API文档指定了以下标头。尽管我提供的头文件没有制定此规范。  extern C long WINAPI PassThruConnect ( unsigned long ProtocolID; unsigned long Flags unsigned long *pChannelID ) 其中WINAPI也称为StdCall不像大多数C / C 库通常使用的Cdecl。 .NET 3.5允许使用错误的调用约定并修复堆栈。从4.0版本开始情况不再如此并且将引发PinvokeStackImbalance异常。 您可以强制4.0也通过将以下代码添加到App.Config来修复堆栈。 configuration runtime NetFx40_PInvokeStackResilience enabled1/ 或者您也可以通过将Cdecl更改为StdCall来简单地修改呼叫约定 [UnmanagedFunctionPointer(CallingConvention.StdCall)] public delegate uint PassThruConnect(uint deviceId, uint protocolId, uint flags, uint baudRate, ref uint channelID); 这篇关于使用.NET 4.0、3.5时UnmanagedFunctionPointer导致堆栈溢出的文章就介绍到这了希望我们推荐的答案对大家有所帮助也希望大家多多支持IT屋 参考链接使用.NET 4.0、3.5时UnmanagedFunctionPointer导致堆栈溢出 - IT屋-程序员软件开发技术分享社区
http://www.zqtcl.cn/news/350782/

相关文章:

  • apple私人免费网站怎么下载无锡网站建设技术
  • 移动应用网站开发阶段作业信息型网站有哪些
  • 监控直播网站开发网站建设与管理总结
  • 青岛城阳网站设计免费网站成品
  • 做服装外贸的网站ghost wordpress
  • 建设银行的网站为什么这么卡网页设计用啥软件
  • 电子商务 网站开发南阳网网站建设
  • 中小型企业网络拓扑图及配置株洲seo网站推广
  • 中国镇江网站如何搭建自己的网址
  • wordpress 自动广告seo搜索引擎优化原理
  • 区块链网站用vue.js做怎么样长春站建筑
  • 集团公司门户网站建设adsl做网站
  • 山东建设监理协会官方网站茂名建站公司模板
  • 烟台做网站案例创业网站推广怎么做
  • php项目网站建设方案书专做药材的网站有哪些
  • 网站表单模板营销型网站建设的5大技巧
  • html手机版网站网站备案后怎么做实名认证
  • 第五冶金建设公司职工大学网站大连工业
  • 网站的基础服务html网站地图生成器
  • 网站开发学徒工作如何设计师培训哪家好
  • 做网站多少钱西宁君博正规株洲在线论坛招聘求职
  • 抚州营销型网站建设殡葬类网站建设
  • 公司网站制作汇报会合肥品牌设计
  • 网站推广策划书怎么说网站建设公司中企动力强
  • php网站源码架构阿里巴巴运营技巧
  • 如何帮助网站吸引流量宁波市网站集约化建设通知
  • 从域名角度看网站建设注意事项河北邯郸seo网站建设网站优化
  • 网站推广策划评估工具7wordpress菜单新连接
  • 网站创建asp电影网站源码
  • 大朗网站建设培训淘宝客cms网站建设