Переполнение стека в приложении c # с использованием c ++ dll - PullRequest
5 голосов
/ 04 апреля 2011

У меня есть программа на c #, использующая dll, управляемую c ++ / cli. DLL содержит много устаревшего кода, состоящего из нескольких окон win32.

Проблема в том, что окнам в dll требуется немного больше стека, чем в среднем кашель . Поскольку это не фоновые процессы, а Win32 API, мне нужно увеличить размер стека потока GUI (по крайней мере, я думаю, что Win32 API в DLL будет использовать основной процесс GUI).

Так что мне нужен способ увеличить размер потока GUI в процессе c #.

Так как я не нашел никаких настроек для достижения этой цели, я попытался редактировать / STACK из командной строки, которая работает. Проблема в том, что он работает только в командной строке, если я пытаюсь ввести его как шаг после сборки, по какой-то причине размер стека двоичного файла не изменяется, даже если шаг после сборки выполняется правильно и не выдает ошибку :(

editbin.exe /STACK:2097152 $(TargetPath)

(Editbin.exe находится в пути, и в окне вывода нет ошибок)

Так как мне получить больший размер стека для моей c ++ dll?

[Update]

Я заметил проблему с использованием editbin.exe.

Это не работает ни в командной строке, ни в качестве шага после сборки:

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

Это работает в командной строке, но не как этап сборки:

editbin.exe /STACK:2097152 app.exe

Но мне нужно, чтобы он работал как шаг после сборки. Я попытался поместить его в командный файл, echo'd, чтобы убедиться, что вызов и рабочий каталог в порядке, но все равно это не работает. Странно.

Ответы [ 2 ]

8 голосов
/ 05 апреля 2011

Это не должно работать, странно, что вы не получаете ошибку сборки. Путь не установлен правильно, чтобы иметь возможность использовать инструмент в сборке C #. Он работает из командной строки, командная строка Visual Studio использует конфигурацию для проекта C / C ++. Эта команда после сборки работала правильно в VS2008:

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

Также обратите внимание на двойные кавычки вокруг целевого макроса пути, чтобы иметь дело с пробелами.

0 голосов
/ 04 апреля 2011

Это помогает? / F (Установить размер стека)

Это в основном ключ / F вместе с количеством байтов, которое вы хотите зарезервировать для стека.

...