4

0xC00000FDネイティブ DLL を呼び出すと、アプリケーションから悪名高い(スタック オーバーフロー) 例外が発生します。これは、Windows CE 5 (SH4 プロセッサ) 上のマネージ C# アプリケーションから実行されています。同じマネージ アプリケーションを使用して Windows XP 用の同じ DLL をコンパイルすると、すべて正常に動作します (オーバーフローなし)。DLL 内のルーチンは非常に複雑な再帰を実行しており、これが最終的にオーバーフローの原因となっていますが、PC では問題なく動作します。

DLL をビルドするときに、スタック サイズを調整する必要があるようです。Visual C コンパイラを使用する場合、CE と XP の両方のデフォルトのスタック サイズはどちらも 1MB だと思います (それが重要な場合は、Visual Studio 2005 を使用しています)。ただし、両方のデフォルトが同じサイズである場合、一方がオーバーフローし、もう一方がオーバーフローしない理由はわかりません。/F コンパイラ フラグと /STACK リンカー フラグを使用してスタック サイズを調整しようとしましたが、何も起こらなかったようです。また、DLL でスタック サイズを指定できるかどうかも完全にはわかりませんが、実行可能ファイルで設定する必要があります。しかし、その場合、マネージド プロセスがネイティブ DLL を呼び出すときに使用するスタック サイズをどのように調整すればよいでしょうか?

4

1 に答える 1