• 締切済み

.NET(C#)でのスタックオーバーフロー回避方法

ASP.NET初心者です。初めて質問させていただきます。 ASP.NET(C#)でwin32系の外部ライブラリを使用したいのですが、そのライブラリを読み込むところで スタックオーバーフローが発生してしまいます。 同じライブラリをWindowsアプリケーション(C#)で使用したところ問題なく実行できました。 ASP.NETで同じように使用しようとするとスタックオーバーフローが発生してしまう状態です。 [デバッグ中のエラーメッセージ] xxxx.dllを読み込めません。再帰が深すぎます。スタックがオーバーフローしました。 [イベントログ] 障害が発生しているアプリケーション名: w3wp.exe、バージョン: 7.5.7600.16385、タイム スタンプ: 0x4a5bcd2b 障害が発生しているモジュール名: xxxx.dll_unloaded、バージョン: 0.0.0.0、タイム スタンプ: 0x4d92e27c 例外コード: 0xc0000005 xxxx.dllは、今回使用したいDLLです。 過去の質問等でスタックオーバーフローが発生した場合の解決策を探してはみたのですが、見つけられた方法が以下の2つでどちらもうまくいきませんでした。 (1)スタック領域を大きくする →スレッドでスタック領域を指定して実行してみました。 (2)ライブラリの中身をスタックオーバーフローが起きないように変更する → ライブラリの中身は変更できない状態です。 (1)のほうは、指定方法間違えてるかもしれません。。。 Thread newthread = new Thread(new ThreadStart(init), 0); もしくは、w3wp.exeでエラーが発生しているということはIIS関係で何かおかしなことをしてしまってるのかもとか・・・。 根本から見方が間違ってるかもしれませんが、(1)の方法の正しいやり方、もしくはそれ以外の解決策をご教授頂きますようよろしくお願いいたします。

みんなの回答

  • onos
  • ベストアンサー率81% (127/155)
回答No.2

Win32系の外部ライブラリ、というのはどういうものでしょう。 COMコンポーネントだとすると、以下のURLにあるような注意が必要ですが、このあたりは大丈夫ですか? http://www.atmarkit.co.jp/fdotnet/aspmigrt/aspmigrt03/aspmigrt03_03.html

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

(1)(2)は逃げの方法です。 まずは、何故スタックオーバーフローが発生するかつきとめる。 「呼び出し履歴」を見るとか。

関連するQ&A

  • スタックオーバーフローについて

    Windows98を使用していますが、最近起動した時に、次のような文章がでるようになりました。「スタックオーバーフローのため、スレッドを停止します。最近インストールされたVxDがスタックを消費しすぎている可能性があります。system.ini.の’Min SPs’設定を増やすか、最近インストールされたVXdを削除して下さい。現在5SPがアロケートされています。」 1.スタックオーバーフローとは何か。 2.スレッドとは何か。 3・VxDとは何か。 4.アロケートとは何か。 5.このまま無視して使用し続けると問題が発生するでしょうか? 素人質問ですみません。 検索でVxDファイルを検索してみると沢山のファイルが 出てきましたが、どれがその問題のファイルか わかりません。 どのように質問をしたらよいのかわからないので 長々と質問を書いてしまいました。 どなたかアドバイスいただけたら幸いです。

  • C#のスタック領域

    C#でA*のアルゴリズムを用いたプログラムを作成しています。 しかし、探索範囲によってスタックオーバーフローを起こします。 スタック領域そのものを増やすことはできないのでしょうか? よろしくお願いします。

  • スタック領域変更

    Stack overflow エラーが発生したので、スタック領域を拡張しようと思い、ネットで調べたのですが、その設定画面が自分の持っているやつにはありませんでした。 自分のは Microsoft Visual C++です。 スタック領域変更の仕方教えて下さい。

  • μITRONのスタック見積もりについて

    μITRON4.0準拠のNORTi+ARMを使用し組み込み開発をしています。 質問は、スタックでオーバーフローの可能性があるため、スタックの見積もりを行いたいのですが、 (1)タスクのスタックの見積もり方法が、タスクごとにスタックを計算し足し算でよいのか(タスクごとにスタック容量を設定するので)、タスクの発生パターンを考えてそれの合計のスタックを見積もればよいのか分かりません。また計算してくれるコマンドやツールはあるのでしょうか? (2)割り込みハンドラ等の非タスクコンテキストとタスクコンテキストのスタックの関係、両者を含めてオーバーフローを考えるべきなのでしょうか? よろしくお願いいたします。

  • VCでのスタックサイズ

    VC++2005のスタックサイズのデフォルトは知らないのですが プロパティ  構成プロパティ   C/C++    コマンドライン 追加のオプション /F 1000000000 953MBのスタックで約1Gのスタックはできるのでしょうか? また、実行ファイル(exeファイルから)スタック領域がわかる方法があるのでしょうか?

  • H8マイコン スタック領域について

    スタック領域について教えて下さい。 [動作環境]  開発環境:ルネサス HEW Version 4.08  マイコン:ルネサス H8/1653  コンパイラ:H8SX,H8S,H8ファミリ用C/C++コンパイラパッケージ V7.00 HEWにて新規作成しますと、セクション定義にスタック領域(S)のアドレスと stacksct.h 内に スタック領域のサイズ #pragma stacksize 0x200 が自動で生成されると思います。 しかし、入手したH8/1653用のサンプルには #pragma stacksize のような サイズ指定がありませんでした。 [サンプル] (1)セクション定義やスタック領域のサイズ指定が無い (2)サブコマンドファイル(xxxx.sub)内でアドレスは設定されているが サイズの設定が無い。 -- サブコマンドファイル(xxxx.sub)-- START  CStart/00000000; START  P,C,D/00000400; START  B,R/00FF2000; START S/00FFC000; [質問]  質問1   (1)のスタック領域はどこに配置されるのでしょうか?  質問2   (2)のスタック領域は 00FFC000 を基準にどう確保   されるのでしょうか? (a)の方向へ確保?(b)の方向へ確保?          00F00000 (a)         ↑       00FFC000 (設定アドレス)         ↓       00FFFFFF (b)        質問3   (1)、(2)共にスタック領域と同時にヒープ領域も指定がありません。   これらは指定しなくても問題ないものなのでしょうか?   また、熟練者の方は指定しないものなのでしょうか? よろしくおねがいします。

  • LNK2001(Pro*c)

    現在、Net8でOracleのデータを参照する、Cの関数を作成しているのですが、 自分で作成したライブラリをリンクして、呼び元をコンパイルすると (Windowsの場合)LNK2001エラーが発生します。 --------------------構成: XXXX - Win32 Debug-------------------- コンパイル中... XXXX.cpp コンパイル中... XXXX.cpp リンク中... XXXX.lib(XXXX.obj) : error LNK2001: 外部シンボル "_sqlcxt" は未解決です Debug/XXXX.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー XXXX.exe - エラー 2、警告 0 -------------------------------------------------------------- となり、UNIXだと、 -------------------------------------------------------------- 未定義の               最初に参照している シンボル               ファイル sqlcxt                XXXX.o ld: 重大なエラー: シンボル参照エラー。XXXX に書き込まれる出力はあ りません。 *** Error code 1 make: Fatal error: Command failed for target `XXXX' -------------------------------------------------------------- となり、sqlcxtを認識出来ていない様です。 ちなみにsqlcxtは、.pcをプリコンパイルすると、.cに吐かれる、 SQLLIBの関数の様です。 Pro*cのライブラリをリンク出来ていないのかと思い、現在いろいろと 調べているのですが、解決できません。 上記では、情報が不足しているかもしれませんが、どなたか御教授下さい。 宜しくお願いします。

  • VC.NET(C#)のクラスライブラリをBCB(C++)で使用したい

    タイトルにあるように、 VC.NET(C#)のクラスライブラリを作成したのですが、 BCB(C++)での使用方法がわかりません。 BCBでプロジェクトに追加で、Dllを追加するのだろうと言うのは わかったのですが、 ソース上で、Dllをどのように呼び出したらよいのかわかりません。 Dllをプロジェクトに追加する以前に、何かしなくてはならないことがあるのでしょうか? よろしくお願いいたします。

  • CのEXEからC#のDLLを呼び出す

    C及びC#のPGは初心者ですが、宜しくお願いします。 現在、Cで作成したEXEからC#で作成したDLLを参照するとエラーが発生します。ただ、EXEとDLLを同じフォルダ内に配置すると正常に動作します。DLLを別のフォルダに配置するとエラーが発生します。 CがC#のDLLのPathが分からないからエラーが発生していると思っているのですが、Cのプロジェクトで何を設定したらいいのか、全然分かりません。 宜しくお願いします。

  • C#からDLLを呼びたいのですが・・・

    C#のASP.NET WebアプリケーションのDLLをC#のWindowsFormのexeで呼び出そうとしています。 すると 'System.EntryPointNotFoundException' のハンドルされていない例外が FTPApi.exe で発生しました。 追加情報 : DLL SampleApi.dll の GetURL というエントリ ポイントが見つかりません。 というエラーメッセージが表示されてしまいます。 クラス上部で [System.Runtime.InteropServices.DllImport("SampleApi.dll", EntryPoint="GetURL")] public static extern string GetURL(); と宣言した後、呼び出したい場所で、 strUrlPath = GetURL(); と呼んでいます。 よろしくお願いします。

専門家に質問してみよう