.net 从托管应用程序调用的本机DLL的堆栈溢出

.net 从托管应用程序调用的本机DLL的堆栈溢出,.net,c,dll,windows-ce,.net,C,Dll,Windows Ce,当我调用本机DLL时,我的应用程序中出现了臭名昭著的0xc0000fd(堆栈溢出)异常。这是通过Windows CE 5(SH4处理器)上的托管C#应用程序完成的。使用相同的托管应用程序为Windows XP编译相同的DLL,一切正常(无溢出)。DLL中的例程正在执行一些非常复杂的递归,这最终是导致溢出的原因,但同样,它在PC上运行良好 在构建DLL时,我似乎只需要调整堆栈大小?我相信在使用Visual C编译器时,CE和XP的默认堆栈大小都是1MB(如果有必要的话,我使用的是Visual St

当我调用本机DLL时,我的应用程序中出现了臭名昭著的
0xc0000fd
(堆栈溢出)异常。这是通过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设置堆栈大小只会设置一个默认值,操作系统可以(通常会)忽略该值。和/F在.DLL上无论如何都不起作用;它仅在编译可执行文件时起作用。DLL没有堆栈;这属于线程和(最终)进程

也许是时候回到绘图板上删除递归了