2011-06-25 7 views
0

私はC#でウェブカメラを利用するためにインターネットから入手したDLLを使用しています。ウェブカメラが見つからない場合は、「使用するカメラを見つけることができません。この時点で他のアプリケーションがあなたのカメラを使用していないことを確認してからもう一度やり直してください。私が抱えている問題は、DLLの作成者がDLLのプログラミングでtry-catchを含んでいたことです... "オブジェクトのインスタンスに設定されていない参照されたオブジェクト"というエラーが代わりに発生するため、try-catchは例外を表示しません(try/catchによってMessageBoxにフォーマットされます)。メッセージを表示して自分自身を表示する前に、組み込みのエラー処理を無効にする方法はありますか?C#別の関数でtry-catchをオーバーライドする

+0

最初にWebCamのテストを行い、そのメソッドを呼び出します。デバッガを自動化する方法を理解したい場合を除きます。 ;-) –

+4

ビリー、どこでDLLを手に入れましたか?ママ、私はインターネットからそれを手に入れました! –

答えて

2

「オブジェクトのインスタンスに設定されていないオブジェクト参照」(NullReferenceException)が表示されている場合、実際に例外をキャッチしなかった可能性があります。

あなたがその正確なケースをキャッチしたいと思うなら(あなたが知らないエラーや、例外処理を行うための適切な方法では処理できないエラーを他の人に伝えさせたい場合)、スタックを使って、例外に含まれる情報:

class Program 
{ 
    public static void DoSomething() 
    { 
     string blah = null; 
     Console.WriteLine(blah.Length); 
    } 

    static void Main(string[] args) 
    { 
     try 
     { 
      DoSomething(); 
     } 
     catch (NullReferenceException e) 
     { 
      string methodName = e.TargetSite.Name; 
      Console.WriteLine(methodName); 

      System.Diagnostics.StackTrace trace = 
       new System.Diagnostics.StackTrace(e, true); 

      int lineNumber = trace.GetFrame(0).GetFileLineNumber(); 
      Console.WriteLine(lineNumber); 

      if(methodName == "DoSomething" && lineNumber == 13) 
      { 
       ShowErrorToUser(); // Todo: Implement this 
      } 
      else 
      { 
       throw; // Just re-throw the error if you don't know where it came from 
      } 
     } 
    } 
} 

編集それは本当にキャッチし、メッセージボックスに表示されていることをコメントで判明

同様の状況に適用されるためこの回答を残しますが、この状況には適用されません。 OscarMKの答えを参照してください。

+0

私は特にNullReferenceExceptionをキャッチしようとしましたが、私はまだ同じことを取得します。私は私が前にそれについて明確かどうか分からないが、それはメッセージボックスに出てくるので、彼は自分のコードで発生するエラーを表示するためにキャッチを使用していることを知っている。私は何とかそれをオーバーライドする必要があり、私のtry/catchがそれを処理できるので、彼はすでに持っているので、どのように考えていない。人生と死ではありませんが、実際に理解できるかもしれないエラーメッセージがほしいと思います。 – Brandon

+0

@Brandon:いいえ、それは明らかではありませんでした:) "オブジェクト参照...代わりに来る"あなたの質問を編集することができますメッセージボックスに表示されているエラーについて何かを言う?また、コードライセンスの問題がない場合は、ILSpyのようなものを使用してDLLからコードをリッピングすることもできます。 –

+0

私はそのプログラムについて知りませんでした。私はそれをチェックアウトする必要があります。彼はコードを公開していないことを除いて、オープンソースのさまざまなサイトにそのように投稿されているので、 "オープンソース"プロジェクトです。彼はちょうど彼のC#プロジェクトファイルのソースコードを投稿しました。 – Brandon

1

try-catchブロックのみをオーバーライドすることはできませんが、メソッドをオーバーライドして、基本的には以前のメソッドが行っていることをすべて実行してtry-catchブロックを削除できます。

+0

私は大好きですが、カメラをどう扱うかわからないので、解決策を探して出かけました。私はWIAを使ってみましたが、それは多くの問題を抱えているようです。そして、私が見つけたdllは、私が必要としていたことを正確に行うために作られました。 (私はそれが意図されていなかったのでsnarkyとは思えませんでした) – Brandon

+0

ILSpyのような逆アセンブリツールを使用してコードの動作を確認し、より良いバージョンを書くことをお勧めします。 – dahlbyk

関連する問題