从C#dll传播错误

用户4592495

主要问题很简单。我创建了一个ac#dll,用作访问解决方案的插件。将错误信息从dll返回到解决方案的正确的OO设计模式是什么?

我知道我曾经用C语言编写的dll使用SetLastError之类的东西,但这似乎不是面向对象模式的最佳解决方案。基本设置是我有一个用VBA编写的类,该类调用dll中的方法。这些方法返回true或false取决于它们是否起作用。如果方法返回false,我希望能够获得有关故障性质的更多信息。

`

 interface IMyClass
 {
      bool MyMethod();
 }
 class MyClass: IMyClass
 {
      public bool MyMethod()
      {
           if(DoSomething() != null)
           {
                return true;
           }
           else
           {
                return false;
           }
      }
      private someDataType DoSomething()
      {
           try
           {
                Something;
                return someDataType;
           }
           catch(SomeException e)
           {
                //how do I return this information
                return null;
           }
      }
 }               

`

尼克博克

如果需要跨边界解决方案,请使用Microsoft建议的解决方案:IErrorInfo接口

在DLL中实现IErrorInfo并将所有导出功能包装到try-catch中:

try
{
  Something;
  return someDataType;
}
catch(SomeException e)
{
  SetErrorInfo(0, new MyErrorInfo(e.Message));
  return null;
}

[DllImport("oleaut32.dll")]
extern static int SetErrorInfo(uint dwReserved, IntPtr pErrorInfo);

在应用程序代码中,调用GetErrorInfo以获取IErrorInfo指针。IErrorInfo可能被C#,C ++,VB等消耗。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章