tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB.NETへの移行
記事No650
投稿日: 2004/01/27(Tue) 14:36
投稿者へなちょこ
[OSのVer]:Windows2000    [VBのVer]:VB.NET  
VB6.0をアップグレードして、細かい修正をした後に、
DLLを参照して使ってみたのですが
「System.StackOverflowException' のハンドルされていない例外が dxcomdb.dll で発生しました。

のメッセージが出ます。
どのように対応すればいいのでしょうか?
何が原因でエラーになっているのでしょうか?
よろしくお願い致します。

[ツリー表示へ]
タイトルRe: VB.NETへの移行
記事No652
投稿日: 2004/01/27(Tue) 21:23
投稿者魔界の仮面弁士
> System.StackOverflowException' のハンドルされていない例外が dxcomdb.dll で発生しました。

このエラーは、プログラム中で、「StackOverflowException」に該当する例外が
発生したという事を意味しています。

そして、その例外を Try/Catch 構文などで処理していない(ハンドルしていない)ため、
それがメッセージとして表示された…という事です。


> 何が原因でエラーになっているのでしょうか?
ヘルプで、System.StackOverflowException クラスについて調べてみてください。
そこには、次のような時に発生すると書かれています。

 『保留状態のメソッド呼び出しが多くなりすぎ、
  実行スタックがオーバーフローした場合』

…分かり難いですね。(汗)

言い換えれば、「あるメソッドから別のメソッドを呼ぶ時」に、その呼び出し階層が
極端に多すぎる事を通知するために発生する例外……といった感じです。

例えば、

  Private Sub A()
    B()
  End Sub

  Private Sub B()
    C()
  End Sub

  Private Sub C()
    A()
  End Sub

このような処理があった場合、A→B→C→A→……のように、メソッドの呼び出しが
延々と繰り返される事になり、最終的には StackOverflowException となります。


この例外は、自分自身を呼び出すメソッド(再帰処理)でのコーディングミスや、
オブジェクトの循環参照、あるいはイベントの連鎖発生などで発生する事もありますし、
  hhttp://support.microsoft.com/default.aspx?scid=kb;ja;316319
のような、言語処理上の問題から引き起こされることもあります。

# あまり回答になってないかも。(汗)

[ツリー表示へ]
タイトルRe^2: VB.NETへの移行
記事No655
投稿日: 2004/01/28(Wed) 09:16
投稿者へなちょこ
回答ありがとうございます。
要するにコーディングがまずいという事ですね。
F8なので追いかければどこかで循環参照をしているという事ですね。
早速、試してみます。

[ツリー表示へ]
タイトルRe^2: VB.NETへの移行
記事No656
投稿日: 2004/01/28(Wed) 09:40
投稿者へなちょこ
すいません。質問よろしいいでしょうか?
一応、Binの下にDLLができていて、これを参照しているわけですが、
呼び出しもとのAPがフォームが上がる前に落ちています。
今は、参照だけはしているのですが、実際は使用はしていません。
これは、DLLがまともにできていないので今回のエラーが発生するのでしょうか?

[ツリー表示へ]
タイトルRe: VB.NETへの移行
記事No659
投稿日: 2004/01/28(Wed) 11:28
投稿者へなちょこ
解決したしました。
DLLの中でDLLを呼んでいました。
そこで質問なのですが、VB6.0では動いていたコードなのですが
VB.NETでは、まったく使えないのでしょうか?

[ツリー表示へ]
タイトルRe^2: VB.NETへの移行
記事No662
投稿日: 2004/01/29(Thu) 00:42
投稿者よねKEN
参照先http://www5b.biglobe.ne.jp/~yone-ken/
[OSのVer]:Windows    [VBのVer]:VB.NET  
> 解決したしました。
> DLLの中でDLLを呼んでいました。

前者のDLLはBinのフォルダ以下にできているとのことなので、
.NETのDLLなんですよね?
その中で呼んでいるというDLLはどういうDLLですか?
(何の言語で作ったどの種のDLL(.NETのDLL、または、ActiveX DLL、または、標準DLL、または、その他)です
か?)

> そこで質問なのですが、VB6.0では動いていたコードなのですが

Binフォルダの中のDLLですか?それともその中から呼んでいるDLLですか?

> VB.NETでは、まったく使えないのでしょうか?

VB6.0で動いていたソースコードを.NET上に持ってきてビルドしたものでしょうか?
(アップグレードウィザードなどでコンバートしたのですか??)
状況がわかりません。

[ツリー表示へ]
タイトルRe^3: VB.NETへの移行
記事No663
投稿日: 2004/01/29(Thu) 10:33
投稿者へなちょこ
すいません。説明が足りませんでした。
DLLは、VB6.0で作成DLLをアップグレードして、必要な個所を修正したものになります。
これは、Binのフォルダの中にできています。
そのDLL(A.DLLという事にします)。Aの中に色々と処理があって、
A.GetDateという処理の中で、A.DateCheckという処理をCallしているのですが、
それが原因でエラーになっているようです。
この処理が、VB6.0ではエラーにはなっていなかったのです。
以上です。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^4: VB.NETへの移行
記事No664
投稿日: 2004/01/29(Thu) 10:57
投稿者魔界の仮面弁士
Option Strict Offにして、レイトバインドで実行した場合にも、同じエラーになりますか?

> A.GetDateという処理の中で、A.DateCheckという処理をCallしているのですが、

現象を再現可能なコードがあれば、こちらでテストしてみることもできるのですが、
提示された情報だけですと、何とも言えません。m(_ _)m

# DLL自体の作りに問題がある(VB6ではたまたま動いてしまっている)のかも知れませんし、
# Visual Studio.NETが自動生成したタイプライブラリに問題があるのかも知れませんし、
# DLLを呼び出す部分のコードに問題があるという可能性も考えられますし。

[ツリー表示へ]
タイトルRe^5: VB.NETへの移行
記事No667
投稿日: 2004/01/29(Thu) 12:05
投稿者へなちょこ
返信ありがとうございます。
そうですか、色々と探る原因はありそうですね。
試してみますので、また何かありましたらよろしくお願いいたします。

[ツリー表示へ]
タイトルRe^4: VB.NETへの移行
記事No665
投稿日: 2004/01/29(Thu) 11:07
投稿者よねKEN
> DLLは、VB6.0で作成DLLをアップグレードして、必要な個所を修正したものになります。

DLLをアップグレードした場合、ActiveX DLLのソースコードをアップグレードして、
.NETのDLLになるのでしょうか?
それともActiveX DLLをInteropして使用しているだけでしょうか?
#この質問は、単に私がVB6製DLLをアップグレードしたことがないので、
#どういう風にアップグレードされるのか知らないためです。

> これは、Binのフォルダの中にできています。
> そのDLL(A.DLLという事にします)。Aの中に色々と処理があって、
> A.GetDateという処理の中で、A.DateCheckという処理をCallしているのですが、
> それが原因でエラーになっているようです。

ということはA.DLLから別のDLLはコールしているとおっしゃていた話は
関係なかったということでしょうか?

ところで、No.656では下記のように書かれていますが、

>>一応、Binの下にDLLができていて、これを参照しているわけですが、
>>呼び出しもとのAPがフォームが上がる前に落ちています。
>>今は、参照だけはしているのですが、実際は使用はしていません。

「A.GetDateという処理の中で、A.DateCheckという処理をCallしているのですが、
 それが原因でエラーになっているようです。」と話が噛み合いませんね。

この「」の内容が問題点なら、A.DLLのメソッドを自作の.NETアプリから
呼び出しているんじゃないですか?また、エラーになっているとのことなので、
何の例外が出ているのでしょう?エラーメッセージの内容は?

[ツリー表示へ]
タイトルRe^5: VB.NETへの移行
記事No666
投稿日: 2004/01/29(Thu) 12:02
投稿者へなちょこ
> 「A.GetDateという処理の中で、A.DateCheckという処理をCallしているのですが、
>  それが原因でエラーになっているようです。」と話が噛み合いませんね。
すいません。別のDLLというのは書き間違えになります。申し訳ありません。
エラーは「System.StackOverflowException' のハンドルされていない例外が dxcomdb.dll で発生しま

た。」というものです。
A.DLLに該当するのがdxcomdb.dllになります。

[ツリー表示へ]
タイトルRe^4: VB.NETへの移行
記事No668
投稿日: 2004/01/29(Thu) 13:21
投稿者魔界の仮面弁士
> DLLは、VB6.0で作成DLLをアップグレードして、必要な個所を修正したものになります。

これは、VB6のActiveX DLLプロジェクトをアップグレードした、という事でしょうか。

それとも、DLL側のソースには一切手を加えず、VB6製のActiveX DLLを、
VB.NETから参照設定して利用している、という事でしょうか?

[ツリー表示へ]
タイトルRe^5: VB.NETへの移行
記事No669
投稿日: 2004/01/29(Thu) 15:12
投稿者へなちょこ
> > DLLは、VB6.0で作成DLLをアップグレードして、必要な個所を修正したものになります。
>
> これは、VB6のActiveX DLLプロジェクトをアップグレードした、という事でしょうか。
>
> それとも、DLL側のソースには一切手を加えず、VB6製のActiveX DLLを、
> VB.NETから参照設定して利用している、という事でしょうか?

返信ありがとうございます。
VB6のActiveX DLLプロジェクトをアップグレードしたものになります。

[ツリー表示へ]
タイトルRe: VB.NETへの移行
記事No670
投稿日: 2004/01/29(Thu) 16:18
投稿者へなちょこ
初心者でまだ知識が浅いので、これ以上質問するのも時間を取らせて申し訳ないと思ったので、
一応、解決を断念します。
CALLしてエラーになるA.DateCheckのコードを呼び出し側のA.GetDateに記述して動くようにしてみまし
た。
よねKENさん、魔界の仮面弁士さん、返答ありがとうございました。

[ツリー表示へ]