使用c ++ dll在c#app中堆栈溢出

时间:2011-04-04 12:31:19

标签: c# dll c++-cli stack-overflow

我有一个使用c ++ / cli托管dll的c#程序。该DLL包含许多遗留代码,包含相当多的win32窗口。

问题是,dll中的窗口需要比平均 cough 更多的堆栈空间。由于这些不是后台进程而是win32 api我需要扩大GUI线程的堆栈大小(至少我认为dll中的win32 api将使用主gui进程)。

所以我需要一种方法来扩大c#进程中GUI线程的大小。

由于我没有找到任何设置来实现这一点,我从命令行尝试了editbin / STACK,这是有效的。问题是,它只能在命令行中运行,如果我尝试将其作为post-build-step输入,由于某种原因二进制的堆栈大小不会改变,即使postbuild步骤正确执行并且没有抛出错误:(

editbin.exe /STACK:2097152 $(TargetPath)

(Editbin.exe在路径中,输出窗口中没有错误)

那么如何为我的c ++ dll获得更多的堆栈大小?

[更新]

我发现使用editbin.exe时出现问题。

这在命令行和后期构建步骤中都不起作用:

editbin.exe /STACK:2097152 c:\some\path\bin\release\app.exe

这在命令行中有效,但不能用作构建步骤:

editbin.exe /STACK:2097152 app.exe

但我需要它作为后期制作步骤。我试着把它放到一个批处理文件中,回显以确保调用和工作目录都可以,但它仍然不起作用。奇怪。

2 个答案:

答案 0 :(得分:8)

这应该不起作用,奇怪的是你没有得到构建错误。未正确设置路径以便能够在C#构建中使用该工具。它可以在命令行中运行,Visual Studio命令提示符使用C / C ++项目的配置。这个post-build命令在VS2008中正常工作:

set path=%path%;$(DevEnvDir);$(DevEnvDir)..\..\vc\bin
editbin.exe /STACK:2097152 "$(TargetPath)"

还要注意目标路径宏周围的双引号来处理空格。

答案 1 :(得分:-1)

这有帮助吗? /F (Set Stack Size)

这基本上是提供/ F开关以及要为堆栈保留的字节数。