ObjectARX には、acedDisableDefaultARXExceptionHandler という関数があります。P/Invoke を試すことができます。
// EntryPoint may vary across autocad versions
[DllImport("acad.exe", EntryPoint = "?acedDisableDefaultARXExceptionHandler@@YAXH@Z")]
public static extern void acedDisableDefaultARXExceptionHandler(int value);
System.Windows.Forms.Application.ThreadException を試すこともできます: http://through-the-interface.typepad.com/through_the_interface/2008/08/catching-except.html
これを行う最も簡単な方法は、すべてのコードを try/catch ブロックでラップすることです。AutoCAD では、コードを実行する方法が 2 つあります。
コマンドで
コードの重複を避けるには、次のようにインターフェイスを宣言します。
public interface ICommand
{
void Execute();
}
次に、コマンドに使用します。
public class MyCommand : ICommand
{
void Execute()
{
// Do your stuff here
}
}
コマンドが定義されているクラスで、このジェネリック メソッドを使用して実行します。
void ExecuteCommand<T>() where T : ICommand
{
try
{
var cmd = Activator.CreateInstance<T>();
cmd.Execute();
}
catch (Exception ex)
{
Log(ex);
}
}
コマンドは次のようになります。
[CommandMethod("MYCMD", CommandFlags.Modal)]
public void MyCommand()
{
ExecuteCommand<MyCommand>();
}
イベント ハンドラーで
この場合、イベント引数が必要なため、コードを try/catch で直接ラップするだけです。