Поскольку это невозможно, как описано в ответе Ханса Пассанта, и поскольку полезная информация, такая как трассировка стека, теряется при преобразовании исключения в COM HRESULT, я часто использую явную реализацию интерфейса, чтобы гарантировать, что исключения регистрируются, когда мойБиблиотека ComVisible вызывается из COM-клиента.Немного работы, но COM-интерфейсы, как правило, стабильны, поэтому это делается только один раз.
Например:
[ComVisible(true)]
public interface IMyClass
{
void MyMethod();
...
}
[
ComVisible(true),
ClassInterface(ClassInterfaceType.None)
]
public MyClass : IMyClass
{
...
public MyMethod()
{
... implementation
}
void IMyClass.MyMethod()
{
try
{
this.MyMethod();
}
catch(Exception ex)
{
_logger.Log(ex);
throw;
}
}
}