主要问题很简单。我创建了一个c#dll来充当访问解决方案的插件。将错误信息从dll返回到解决方案的适当的OO设计模式是什么?
我知道我使用SetLastError之类的东西来编写用C编写的dll,但这似乎不是OO模式的最佳解决方案。基本设置是我有一个用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;
}
}
}
`
答案 0 :(得分:0)
你有几个选择,我想你想要第一个:
答案 1 :(得分:0)
如果您需要跨境解决方案,请使用Microsoft建议的解决方案:IErrorInfo interface。
在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等消耗。