当我调用本机 DLL 时,我的应用程序出现了臭名昭著的0xC00000FD
(堆栈溢出)异常。这是通过 Windows CE 5(SH4 处理器)上的托管 C# 应用程序完成的。使用相同的托管应用程序为 Windows XP 编译相同的 DLL,一切正常(没有溢出)。DLL 中的例程正在执行一些非常复杂的递归,这最终是导致溢出的原因,但同样,它在 PC 上运行良好。
看起来我可能只需要在构建 DLL 时调整堆栈大小?我相信在使用 Visual C 编译器时,CE 和 XP 的默认堆栈大小都是 1MB(如果重要的话,我使用的是 Visual Studio 2005)。如果它们都默认为相同的大小,我不确定为什么一个会溢出而另一个不会溢出。我尝试使用 /F 编译器标志和 /STACK 链接器标志调整堆栈大小,但这似乎没有任何作用。我也不完全清楚我可以在 DLL 中指定堆栈大小,而是可执行文件必须设置它。但如果是这种情况,我将如何调整我的托管进程在调用本机 DLL 时使用的堆栈大小?