当我调用本机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时使用的堆栈大小?
答案 0 :(得分:4)
这是指向Windows CE a discussion of the memory architecture的链接。
最终,您无法以编程方式或在编译时调整堆栈大小;操作系统会根据许多因素(包括内存可用性)来改变它。使用/ F设置堆栈大小仅设置OS可以(通常将)忽略的默认值。无论如何,/ F对.DLL不起作用;它只在编译可执行文件时有效。 .DLL没有堆栈;属于线程并且(最终)属于进程。
可能是时候回到绘图板去除你的递归了。