C# 应用程序使用 C++ DLL 时出现堆栈溢出错误

5
我有一个使用c++/cli托管dll的c#程序。该dll包含许多遗留代码,其中包括相当多的win32窗口。
问题在于,dll中的窗口需要比平均值更多的堆栈空间。由于这些不是后台进程而是win32 api,因此我需要扩大GUI线程的堆栈大小(至少我认为dll中的win32 api将使用主GUI进程)。
所以我需要一种方法来扩大c#进程中GUI线程的大小。
由于我找不到任何设置来实现这一点,所以我尝试从命令行使用editbin /STACK,这有效果。问题是,它只在命令行中起作用,如果我尝试将其输入为后置构建步骤,由于某种原因二进制文件的堆栈大小没有改变,即使后置构建步骤已经正确执行且没有出现错误:(
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

但我需要它作为构建后步骤工作。我尝试将其放入批处理文件中,使用echo命令确保调用和工作目录正确,但仍然无法正常工作。很奇怪。


你尝试过用批处理文件包装你的命令吗?这样会更像命令行,也许可以解决问题。 - Edurne Pascual
你能否也发布你的后构建宏来这样做吗?也许我们可以在那里找到错误。 - Bobby
herenvardo,我试图在cmd中运行它,但总是失败 :( - Sam
@Bobby,发布了构建步骤。 - Sam
@Sam:在我看来应该可以……路径中有空格吗?像 editbin.exe /STACK:2097152 "$(TargetPath)" 这样的? - Bobby
显示剩余9条评论
2个回答

8

这不应该起作用,奇怪的是你没有得到编译错误。路径设置不正确,无法在C#构建中使用该工具。它可以从命令行中工作,Visual Studio命令提示符使用C/C++项目的配置。这个后置构建命令在VS2008中正常工作:

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

还要注意在目标路径宏周围加上双引号以处理空格。


啊,是的,搜索路径就是问题所在!我添加了\vc\bin的路径,但另一个路径仍然缺失,所以既无法工作也没有报错。 - Sam
我认为在执行后构建步骤时,最好以 call "$(DevEnvDir)..\..\VC\vcvarsall.bat" 开始。这就是我的做法。 - ulatekh

-1

这正是我需要的,但在C#程序中我应该把它放在哪里? - Sam
这个选项适用于C++编译器,而不是C#编译器。 - Justin
是的 - 由于我的程序是C#程序,因此无法为其设置该选项。 - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接