tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル素通りされてしまう関数について。
記事No1537
投稿日: 2005/03/31(Thu) 14:22
投稿者nao
[OSのVer]:Windows    [VBのVer]:VB.NET

お世話になります。
早速なのですが、関数について質問があります。

症状としては、関数A(Func_A)の中で関数B(Func_B)を実行しようとすると、実行されずに素通りされるというものです。

調べたところ、関数Aに関数Bの呼び出しが記述されている場合、
関数Aで宣言したDataView等のプロパティ値が"error: cannot obtain value"に変わっていることがわかりました。

逆に、FunctionBの呼び出しをコメントアウトした場合、
関数A内で宣言した上記の三つは正常に値を取得できるようなのですが・・・なぜそうなってしまうのかが分かりません。

エラーメッセージを元に検索してみたのですが、具体的な対策を見つける事ができませんでした。
どなたかご教授願います。

'//
Private Function Func_A
Dim DV as new DataView    ←プロパティの値が "error: cannot obtain value"になる。
・・・
  Function_B(DV)       ←Function_Bは実行されず、素通り。
・・・
End Function

Private Func_B(Byval DV as DataView)
・・・
End Function

[ツリー表示へ]
タイトルRe: 素通りされてしまう関数について。
記事No1540
投稿日: 2005/03/31(Thu) 18:37
投稿者花ちゃん
> Private Function Func_A
> Dim DV as new DataView    ←プロパティの値が "error: cannot obtain value"になる。
> ・・・
>   Function_B(DV)       ←Function_Bは実行されず、素通り。
> ・・・
> End Function
>
> Private Func_B(Byval DV as DataView)
> ・・・
> End Function

これ実際に使っているコードですか? それとも適当なコード(でたらめな)
Function_B ってどこにあるの?

再現できる簡単なコードをペースト(手書きでなく)して下さい。

[ツリー表示へ]
タイトルRe: 素通りされてしまう関数について。
記事No1542
投稿日: 2005/03/31(Thu) 20:02
投稿者じゃんぬねっと
参照先http://jeanne.wankuma.com/
こんにちは、じゃんぬ です。

> error: cannot obtain value

うーん... 情報が少ないですねぇ...
hhttp://www.gotdotnet.com/community/messageboard/Thread.aspx?id=286959

> Function_Bは実行されず、素通り。

こちらに関しては別の問題な気がします。
素通りしたと確信した理由はなんですか?
メソッド内の先頭にブレイクポイント置きました?
System.Diagnostics.DebuggerStepThrough() 属性がついてません?

[ツリー表示へ]
タイトルRe^2: 素通りされてしまう関数について。
記事No1556
投稿日: 2005/04/04(Mon) 13:56
投稿者nao
[OSのVer]:Windows    [VBのVer]:VB.NET  

naoです。返答が遅れて申し訳有りません。

[To 花ちゃんさん]

> > Private Function Func_A
> > Dim DV as new DataView    ←プロパティの値が "error: cannot obtain value"になる。
> > ・・・
> >   Function_B(DV)       ←Function_Bは実行されず、素通り。
> > ・・・
> > End Function
> >
> > Private Func_B(Byval DV as DataView)
> > ・・・
> > End Function
>
> これ実際に使っているコードですか? それとも適当なコード(でたらめな)
> Function_B ってどこにあるの?

> 再現できる簡単なコードをペースト(手書きでなく)して下さい。

すいません。適当なコードを使用していました。
Function_B → Func_B の間違いです。
また、使用する引数も一つ(DataView)だけではなく、実際は複数存在しています。
今後は実際に再現できるコードを書かせていただきます。本当にすいません。

[To じゃんぬねっとさん]

> > error: cannot obtain value

> うーん... 情報が少ないですねぇ...
> hhttp://www.gotdotnet.com/community/messageboard/Thread.aspx?id=286959

えぇ。私も調べてみたのですがほとんどヒットしなくて。
教えていただいたアドレスを元に調べてみましたが・・・同じように困っている方がいるのですね。
解決はできなかったのですが、エラーの発生条件をちょっと勉強できました。

> > Function_Bは実行されず、素通り。

> こちらに関しては別の問題な気がします。
> 素通りしたと確信した理由はなんですか?
> メソッド内の先頭にブレイクポイント置きました?
> System.Diagnostics.DebuggerStepThrough() 属性がついてません?

素通りの確認には、仰るとおり、メソッド内の先頭にブレイクポイントを置くことで調べていました。
また、System.Diagnostics.DebuggerStepThrough()属性についてですが、ソースを見た限りついていな
いと思います。
(ソースコードをこの属性名で検索して、関数名の前で見つからなければ属性はついていないと判断したのですが・・・よろしいのでしょうか?)

あの後、じゃんぬねっとさんの”別の原因”という言葉が気になって調べて見たところ、素通りを解消することができました。

Func_Bについてですが、実は他にも引数を幾つか指定していて、その中の”構造体”の指定で失敗していたようです。原因が記述以外の点であったことをお詫び致します。

原因となる要素がわかりましたので、今回は構造体を取り除いて、別の変数に置き換えることで素通り
を防ぎました。

調べていく上でわかったことなのですが、この不正な引数を含む関数があることで、呼び元の関数にも影響を及ぼしていることが判明しました。
具体的には、呼び元で宣言した変数のプロパティ値をエラーにしてしまうという事態です。
同様の症状が発生した方は参考までに。

詳しい理由は不明なのですが、追って調査していこうと思います。
花ちゃんさん、じゃんぬねっとさん、どうもありがとうございました〜。

[ツリー表示へ]