C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: .Net Frameworkエラー


(過去ログ 21 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■9067 / inTopicNo.1)  .Net Frameworkエラー
  
□投稿者/ masami (1回)-(2007/10/18(Thu) 09:19:39)

分類:[VB.NET/VB2005] 

こんにちは。
VS2005からCADを開いて処理をしています。
できたPGをインストールし、実行していたところ
「例:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

JIT デバッグが有効なときは、このダイアログ ボックスで処理するよりも、
ハンドルされていない例外はすべてコンピュータに登録された
JIT デバッガに設定されなければなりません。」

と表示されます。
しかし、このエラーが表示されるPCとされないPCがあるんです。。。

ネットで調べた所、VS2005ではこのようなエラーは表示されないと表示されてました。
しかしエラーがでてしまうので
下記のPGをapp.configで保存しまいた。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

このPGを追加しても同じエラーになります。
PG側でこのエラーが出ないようにできるのでしょうか?
引用返信 編集キー/
■9073 / inTopicNo.2)  Re[1]: .Net Frameworkエラー
□投稿者/ まどか (380回)-(2007/10/18(Thu) 11:34:49)
それは例外そのものではなく、例外が発生したが「ハンドルされていない例外」であるためランタイムが追加で表示しているメッセージです。
表示されるダイアログに(一番上のほう)本来のメッセージが表示されていませんか?
例外が発生しているのだから、それをつきとめましょう。

※「ハンドルされていない例外」とは例外が発生したところから呼び出し元をたどっていき一度もCatchされなかったということです。

引用返信 編集キー/
■9074 / inTopicNo.3)  Re[2]: .Net Frameworkエラー
□投稿者/ masami (2回)-(2007/10/18(Thu) 11:46:53)
No9073 (まどか さん) に返信
> それは例外そのものではなく、例外が発生したが「ハンドルされていない例外」であるためランタイムが追加で表示しているメッセージです。
> 表示されるダイアログに(一番上のほう)本来のメッセージが表示されていませんか?
> 例外が発生しているのだから、それをつきとめましょう。
>
> ※「ハンドルされていない例外」とは例外が発生したところから呼び出し元をたどっていき一度もCatchされなかったということです。
>

呼び出し先が呼び出しを拒否しました。
(HRESULTからの例外:0x8001001(RPC_E_CALL_REJECTED))
と表示されています。

しかし、エラーが出たPCでもこのエラーがでる場合と出ない場合があります。
きちんとCatchされる時とされない時があるんですねぇ〜。
もぉ少し調べてみます。

引用返信 編集キー/
■9078 / inTopicNo.4)  Re[3]: .Net Frameworkエラー
□投稿者/ まどか (381回)-(2007/10/18(Thu) 13:02:14)
> きちんとCatchされる時とされない時があるんですねぇ〜。

違います。
Catch「していない」のです。
つまり、ネストしたTry句の外側で例外が発生したということです。
引用返信 編集キー/
■9082 / inTopicNo.5)  Re[4]: .Net Frameworkエラー
□投稿者/ masami (3回)-(2007/10/18(Thu) 14:36:24)
エラーがでない時もCatchしてないってことですか?
でも処理はちゃんとされますけど。。。

そのPCにVS2005が入ってないのでPGを動かしながら確認ができないのですが。。。

引用返信 編集キー/
■9086 / inTopicNo.6)  Re[5]: .Net Frameworkエラー
□投稿者/ まどか (382回)-(2007/10/18(Thu) 15:17:34)
private Sub Method0()

Try
Method1() ※1
Catch ex As Exception
Exit Try
End Try

Method1() ※2

End Sub

Private Sub Method1()

処理1

Try
処理2
Catch ex As Exception
End Try

End Sub

処理1で例外が発生するとした場合

※1
Method0でTryで囲まれておりExit Tryで通常の流れに戻っています。
したがって、例外は握りつぶされてダイアログは表示されません。

※2
Method0内でTryで囲まれておらず、かつMethod0の親もそのような場合、今回のようにランタイムがダイアログを表示します。
Catchしていないとはこういうことです。

引用返信 編集キー/
■9087 / inTopicNo.7)  Re[6]: .Net Frameworkエラー
□投稿者/ まどか (383回)-(2007/10/18(Thu) 15:24:22)
> 呼び出し先が呼び出しを拒否しました。
> (HRESULTからの例外:0x8001001(RPC_E_CALL_REJECTED))
> と表示されています。

このメッセージからCADのオブジェクトを呼び出すステップで出ていると思われます。
で、そのステップはその呼び出し元を含めてTryで囲まれていないはずです。

言い忘れましたが、CatchしていないとはCatchしている例外でないものの場合も当てはまります。

Try
Catch ex As ArgumentException
End Try

この場合、ArgumentExceptionでない例外の場合に同様のことが起こります。
というわけで囲まれていないというのは間違いでした。
引用返信 編集キー/
■9088 / inTopicNo.8)  Re[7]: .Net Frameworkエラー
□投稿者/ masami (4回)-(2007/10/18(Thu) 16:30:16)
Try
objApp = CreateObject("AutoCAD.Application")
Catch ex As ArgumentException
Exit Sub
End Try

上記の用に設定しました。
これで1度PGを動かしてもらいます。
ありがとうございました。

まどかさん、ありがとうございます。
引用返信 編集キー/
■9089 / inTopicNo.9)  Re[5]: .Net Frameworkエラー
□投稿者/ 魔界の仮面弁士 (477回)-(2007/10/18(Thu) 16:33:05)
No9082 (masami さん) に返信
> エラーがでない時もCatchしてないってことですか?
> でも処理はちゃんとされますけど。。。
> そのPCにVS2005が入ってないのでPGを動かしながら確認ができないのですが。。。

たとえば(AutoCADなどへの)オートメーション操作を行っているのであれば、
その CAD 側がビジー状態だったり、強制終了されていれば、例外が発生するはずです。

たとえば当方では下記コードにおいて、Excel 2007 操作時に RPC_E_CALL_REJECTED が発生しました。


Imports System
Imports System.Runtime.InteropServices
Public Class Sample
 Public Shared Sub Main()
  Dim o As Object = Nothing
  Try
   o = CreateObject("Excel.Application")
   o.Visible = True
   MsgBox("Excel側で[ファイルを開く]ダイアログを表示させ、" & vbCrLf _
    & "そのダイアログが開かれた状態のまま、" & vbCrLf _
    & "このメッセージボックスの OK ボタンを押してください。", _
    vbSystemModal, "実験")
   o.Quit()
   MsgBox("正常終了", vbInformation, "問題なし")
  Catch e As COMException When e.ErrorCode = &H80010001
   MsgBox(e.ToString(), vbExclamation, "RPC_E_CALL_REJECTEDが発生")
  Catch e As Exception
   MsgBox(e.ToString(), vbExclamation, "その他のエラー発生")
  Finally
   If Not o Is Nothing AndAlso Marshal.IsComObject(o) Then
    Marshal.ReleaseComObject(o)
   End If
  End Try
 End Sub
End Class


Excel でいえば、「セルに値を入力中」「長い再計算処理の最中だった」などなど、
通信先が応答できない状況というのは常にありえるので、それらはきちんと Catch して、
必要であれば、如何にリカバリすべきか、アプリケーション設計者が決めておかねばなりません。

# リカバリの方法としてはたとえば、「エラー扱いにして処理を中断する」「数秒後に再試行する」
# 「無視して次の処理を続ける」「中止/再試行/無視のダイアログを出してユーザに決めさせる」など。
引用返信 編集キー/
■9090 / inTopicNo.10)  Re[8]: .Net Frameworkエラー
□投稿者/ 魔界の仮面弁士 (478回)-(2007/10/18(Thu) 16:35:18)
No9088 (masami さん) に返信
> Try
> objApp = CreateObject("AutoCAD.Application")
> Catch ex As ArgumentException
> Exit Sub
> End Try
> 上記の用に設定しました。

それだと、「ArgumentException 以外の例外が発生した時」には対応できないのでは。
(今回の例外って、RPC_E_CALL_REJECTED なのですよね?)
引用返信 編集キー/
■9092 / inTopicNo.11)  Re[9]: .Net Frameworkエラー
□投稿者/ masami (5回)-(2007/10/18(Thu) 16:55:08)
ありがとうございます。
私もメッセージを設けました。

初心者ですがこれからも宜しくお願いします。
解決済み
引用返信 編集キー/
■9094 / inTopicNo.12)  Re[9]: .Net Frameworkエラー
□投稿者/ まどか (384回)-(2007/10/18(Thu) 17:07:39)
No9090 (魔界の仮面弁士 さん) に返信
>>Catch ex As ArgumentException
>
> それだと、「ArgumentException 以外の例外が発生した時」には対応できないのでは。

鋭い視点に秀樹感激。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -