Я получаю печально известное исключение 0xC00000FD
(переполнение стека) из моего приложения, когда я вызываю нативную DLL. Это делается из управляемого приложения C # в Windows CE 5 (процессор SH4). Компилирование той же DLL для Windows XP с использованием того же управляемого приложения, и все работает нормально (без переполнения). Подпрограмма в DLL выполняет очень сложную рекурсию, которая, в конечном счете, и является причиной переполнения, но, опять же, она отлично работает на ПК.
Кажется, мне просто нужно отрегулировать размер стека при сборке DLL? Я считаю, что размер стека по умолчанию для CE и XP составляет 1 МБ при использовании компилятора Visual C (я использую Visual Studio 2005, если это имеет значение). Если они оба по умолчанию имеют одинаковый размер, я не уверен, почему один переполнится, а другой - нет. Я попытался настроить размер стека с помощью флага компилятора / F и флага компоновщика / STACK, но это, похоже, ничего не дало. Мне также не совсем понятно, что я могу указать размер стека в DLL, но исполняемый файл должен его установить. Но если это так, как бы я изменил размер стека для моего управляемого процесса, чтобы использовать его при вызове в собственную DLL?