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)の方法の正しいやり方、もしくはそれ以外の解決策をご教授頂きますようよろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Win32系の外部ライブラリ、というのはどういうものでしょう。


COMコンポーネントだとすると、以下のURLにあるような注意が必要ですが、このあたりは大丈夫ですか?

http://www.atmarkit.co.jp/fdotnet/aspmigrt/aspmi …
    • good
    • 0

(1)(2)は逃げの方法です。



まずは、何故スタックオーバーフローが発生するかつきとめる。
「呼び出し履歴」を見るとか。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q最大スタックサイズを大きくすることの影響は?

再帰呼び出しを行うプログラムでスタックオーバーフローが発生するようになりました。

そこで最大スタックサイズを変更しようと考えていますが
最大スタックサイズを大きくすることで何か影響があることはあるのでしょうか?

他アプリ等に影響が出ないかを懸念しています。

※最大スタックサイズは最大で16Mらしく、現在は1Mです。
 特に影響がないのであれば最初から16Mにしておけば良いような気もして疑問に思っています。

Aベストアンサー

スレッドごとにスタックが確保されるのでプロセスで使用可能な最大スレッド数が減ります
他プロセスへの影響は起こりえません

QC# 再帰よるスタックオーバーフローについて

VB2008 C# でプログラムしていますが、
プログラムで再帰を多く行わなくてはならず、
スタックオーバーフローが出てしまいます。

スタックオーバーフローを解決するためには、アルゴリズムを変更し、
再帰の回数を減らすしか方法はないのでしょうか?

もしスタックの上限を変更する方法などがありましたら教えてください。

VBは初心者なので、なるべく簡単にお願いします。

Aベストアンサー

プロでもなく、C#の経験もないので、私の出る幕ではないと思いましたが、似たような質問をされた方がいらっしゃるようです。もしかしたら参考になるかもしれません。
http://oshiete1.goo.ne.jp/qa2438590.html

アマチュアの私には、アルゴリズムを変えるか、引数や局所変数を減らす、ぐらいしか思いつきません。C#ではstructは値型なんですか?そうすると、局所変数でstructを使うとスタックを多量に使うかもしれませんね(C#の内部を知らないので断言できませんが)。

Q「いずれか」と「いづれか」どっちが正しい!?

教えて下さいっ!
”どちらか”と言う意味の「いずれか」のかな表記として
「いずれか」と「いづれか」のどちらが正しいのでしょう???

私は「いずれか」だと思うんですが、辞書に「いずれか・いづ--。」と書いてあり、???になってしまいました。
どちらでもいいってことでしょうか?

Aベストアンサー

「いずれか」が正しいです.
「いづれ」は「いずれ」の歴史的かな遣いですので,昔は「いづれ」が使われていましたが,現代では「いずれ」で統一することになっていますので,「いずれ」が正しいです.

Qドメインの一般ユーザーにローカルの管理者権限を付与したい

ドメインの一般ユーザーにローカルコンピューターの管理者権限を付与する方法を教えてください。ドメイン管理者のパスワードは知っています。

Aベストアンサー

Windows XPと仮定して。
1.ローカルコンピューターにドメイン管理者のアカウントでログオン。
2.「マイコンピュータ」を右クリック⇒「管理」
3.「コンピュータの管理」画面⇒「システムツール」⇒「ローカルユーザーとグループ」⇒「グループ」
4.「Administrators」を右クリック⇒「グループに追加」
5.ドメインの特定のユーザー(あるいは、Domain Users)を追加
でできるはずです。

Qデータベースの内容をCSVへ出力。

VB2005環境、DBはOracle10gです。

データベースから取得したテーブルの内容を、CSVとして
出力する機能をサービスアプリに付け足したいと考えています。
データベースから値を取得する方法についていろいろと調べては
みたのですが、VB2005環境では、Windowsアプリケーションとして
作成する方法しか見つからず(コントロールを配置する際に
デザイナを使う方法)、クラスライブラリに機能としてSQL発行から
CSVとしてデータを出力するまでの処理をどうしたらいいのか
わからず困っています。

基本的なところから勉強できるサイトがありましたらご教授
願えないでしょうか?
よろしくお願いします。

Aベストアンサー

こんばんは。

いろいろなやり方がありますけど、今の主流はADO.NETのようです。
http://www.atmarkit.co.jp/fdotnet/basics/adonet_index/index.html

ポイントはDBのデータをDataSetのDataTableへの格納です。

格納できたら、ここを参考。
http://dobon.net/vb/dotnet/file/writecsvfile.html

DataTableからCSVへ出力できます。

QC#「オブジェクト参照が必要です」(初心者)

Visual C# 2008を学習中なんですが、とりあえず何か作ってみようと思って、パラパラマンガに挑戦してみました。
Form1にpictureBox1を作り、waitを入れてイメージを書き換えるという単純なものです。
ところが実行しようと思ったら、「静的でないフィールド、メソッド、またはプロパティ’WindowsFormApplication1.Form1.pictureBox1’でオブジェクト参照が必要です」というエラーが出ます。その際のフォーカスは、main()内の
Form1.pictureBox1.image = Image.FromFile("motion1.png");
”Form1.pictureBox1”に当てられています。

何が原因と考えられるでしょうか。
もし情報不足であればご指摘いただくか、あるいはこの目的においてやらなければいけないこと、を大雑把に教えていただくだけでも幸いです。
よろしくお願いします。

Aベストアンサー

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具体的な解決方法としては、PictureBoxに初期画像を設定する処理をForm1のコンストラクタでやるのがいいと思います。
その際、redfox63さんがおっしゃられるように
this.pictureBox1
と記述することが必要です。(thisは自分自身のインスタンスを指します)

後は、Windowsフォームで一定間隔での処理をするための「Timerコンポーネント」について調べてみたらいいと思います。

タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編)
http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html

MSDNライブラリ Timerクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.timer.aspx

参考URL:http://www.atmarkit.co.jp/fdotnet/csharp_abc2/index/

main()内に記述されているとのことですので、たぶん、
Form1.pictureBox1.Image=Image.FromFile("motion1.png");
Application.Run(new Form1());
と書いているのではないでしょうか?

連載 改訂版 C#入門 第3章 クラスとインスタンス
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_01.html#cs0302

ここであるように、オブジェクト指向にはクラスとインスタンスという概念があります。
今のコードでは、Form1クラスを操作しようとしているのでそのようなエラーが出ます。

具...続きを読む

Qスタック領域変更

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

Aベストアンサー

VC++でも VC6/2003/2005/2008などいろいろなバージョンがあります

プロジェクトの設定画面のリンカー関連に『スタックサイズ』といった項目があります
コンパイラのバージョン、エディションなどを明記しましょう

コマンドラインオプションなら /STACK:希望のサイズ になるでしょう
希望のサイズはバイト単位で指定します

本当にスタックの不足なのでしょうか
プログラム的にバグがあり期待しないところで再帰がかかっていてスタックを食いつぶしていることも考えられますよ

QIISワーカープロセスが原因でCPUが100%に

ASP.NETを用いたWebサイトをIIS上で運用した際、開発したアプリケーションが少しでも動いた後にアプリケーションを停止せずサイトを停止すると、ワーカープロセスが原因でCPUが100%となります。
CPUが100%の状態のまま放置してもCPUの負荷が無くなりません。(アプリケーションプールを停止させることによってCPUの負荷が無くなります。)

この事象に関してネットで原因を調査した結果、明確な解決方法が見当たらずこちらに質問させていただく次第でございます。IISの設定に関して詳しい方がおられましたら、この事象の原因と考えられる要素などをご教授下さい。

動作環境
Windows2008 R2
IIS7.5
.NET FrameWork4.5

開発環境
VisualStudio2012
ASP.NET(.NET FrameWork4.0) FORMSで開発
Oracle ODP

Aベストアンサー

「アプリケーションを停止せずサイトを停止」というのが具体的にどのような手順なのかわからないのですが、手元のシステム(IIS7.5/Win2008R2server)で、World Wide Web Serviceを強制停止してみても、メモリプールやCPU占有は発生しません。

世の中に、IIS7.5+ASP.NET4 Web Formms+ODP.NETで構築されたシステムは大量に存在し、しかも業務用途でクリティカルな要件で動作しているものも数多いはずなので、根本的なバグである事は考えられません。事象の切り分けが必要かと思います。

・ODP.NETなしのアプリケーションでも同じ事象が発生するか?
・DAOによる変化はあるか?(DataReader、TableAdapter、EntityFrameworkなど)
・「アプリケーションが少しでも動いた後’というのはODP.NETと無関係か?
・(プログラム中)usingによるリソースやトランザクションの開放は確実に行っているか?

など、突っ込みどころは多いです。

QMSCOMCTL.OCXのアップデートの方法

Excel VBAを使っていて
ListviewなどのMSCOMCTL.OCXに依存した
コントロールを使っている場合
MSCOMCTL.OCXに上位互換性がないため、
VBAを含むxlsmファイルを作成したPCとは異なるPCで
そのプログラムを使用するためには
使うPCごとにMSCOMCTL.OCXをアップデートする必要があります。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1198163781

詳細はこのページに書かれてあります。

疑問は、いま、自分が使っているMSCOMCTL.OCXのバージョンが2012年のものなのですが
Windows10にアップグレードするなどした場合に
MSCOMCTL.OCXをアップグレードする必要がありますが
VBAは正常に動作するのでしょうか?

MSCOMCTL.OCXには下位互換性があるのでしょうか?

もし動作しないとして、
一つずつListviewを削除して新規作成するという作業を行う必要があるのでしょうか?
自動更新できる方法があれば教えてください。

Excel VBAを使っていて
ListviewなどのMSCOMCTL.OCXに依存した
コントロールを使っている場合
MSCOMCTL.OCXに上位互換性がないため、
VBAを含むxlsmファイルを作成したPCとは異なるPCで
そのプログラムを使用するためには
使うPCごとにMSCOMCTL.OCXをアップデートする必要があります。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1198163781

詳細はこのページに書かれてあります。

疑問は、いま、自分が使っているMSCOMCTL.OCXのバージョンが2012年のものなのですが
Windows10に...続きを読む

Aベストアンサー

>Win10 PCで作成したVBAをWin7 PCにコピーして使用するためには、
>「~7.0(SP6)(仮称)」にチェックを入れる必要があるはずです。
その場合にはWin7PCではMicrosoft ListView Control 6.0(SP4)にチェックを入れなおせば
まず問題ないはずです。
ちなみに当方のWin7 Office2010 のMicrosoft ListView Controlの実体ファイルの
製品バージョンは6.01.9839
Win10 Office2016(プレビュー版)のmscomctl.ocxのバージョンも同一でした。
単純なテストですが、2016 → 2010 では問題なかったです
VBAはよく言えば枯れた状態ですので大々的なアップデートは無いでしょう。
あったとしたらMicrosoft ActiveX Data Object x.x Libraryと同様
Microsoft ListView Control 6.0・・・
Microsoft ListView Control 7.0・・・
のように複数バージョンが並行して登録されるとおもいます。

>オフィスを常にアップデートして最新の状態にしておく必要があるということでしょうか?
大多数の人は更新プログラムを自動的にインストールする設定にしたままだと思います。
最新にというかリビジョンを合わせた方がつまらないトラブルにならないと思います。
ただ、近年のアップデートは地雷が多すぎて何とも言えなくなりました。。。

>Win10 PCで作成したVBAをWin7 PCにコピーして使用するためには、
>「~7.0(SP6)(仮称)」にチェックを入れる必要があるはずです。
その場合にはWin7PCではMicrosoft ListView Control 6.0(SP4)にチェックを入れなおせば
まず問題ないはずです。
ちなみに当方のWin7 Office2010 のMicrosoft ListView Controlの実体ファイルの
製品バージョンは6.01.9839
Win10 Office2016(プレビュー版)のmscomctl.ocxのバージョンも同一でした。
単純なテストですが、2016 → 2010 では問題なかったです
VBAはよく言えば枯れた状...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報