c/c++语言开发共享从托管应用程序调用的本机DLL的堆栈溢出

当我调用本机DLL时,我从我的应用程序中得到了臭名昭着的0xC00000FD (堆栈溢出)exception。 这是通过Windows CE 5(SH4处理器)上的托管C#应用程序完成的。 使用相同的托管应用程序为Windows XP编译相同的DLL,一切正常(没有溢出)。 DLL中的例程正在进行一些非常复杂的递归,这最终导致溢出,但同样,它在PC上运行良好。

看起来我可能只需要在构建DLL时调整堆栈大小? 我相信使用Visual C编译器时,CE和XP的默认堆栈大小都是1MB(我使用Visual Studio 2005,如果这很重要)。 如果它们都默认为相同的大小,我不确定为什么会溢出而另一个不会。 我尝试使用/ F编译器标志和/ STACK链接器标志调整堆栈大小,但似乎没有做任何事情。 我也不完全清楚我可以在DLL中指定堆栈大小,而是可执行文件必须设置它。 但是,如果是这样的话,我如何调整托管进程在调用本机DLL时使用的堆栈大小?

    这是一个关于Windows CE 内存架构讨论的链接。

    最终,您无法以编程方式或在编译时调整堆栈大小; 操作系统会根据许多因素(包括内存可用性)来改变它。 使用/ F设置堆栈大小仅设置可以(通常将)被OS忽略的默认值。 无论如何,/ F对.DLL不起作用; 它只在编译可执行文件时有效。 .DLL没有堆栈; 属于线程并且(最终)属于进程。

    可能是时候回到绘图板去除你的递归了。

      以上就是c/c++开发分享从托管应用程序调用的本机DLL的堆栈溢出相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544654.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐