.net - Raise positive VB style error codes via COM interop from C# -
i have base library created in vb6 exposes standard com interface used in number of applications. exposed number of error code constants, used err.raise
indicate conditions.
public enum ioerrors ioerrorbase = 45000 ioerrorconnectionfailed ioerrorauthfailed ioerrornotconnected ioerrorinvalidportdirection ioerrorgettingvalue ioerrornovalueyet end enum
come on 10 years , we're creating c# objects implementing same set of interfaces , want throw exceptions in way calling application recognise them.
i can find 2 relevant classes, win32exception
, comexception
.
throwing win32exception((int)ioerrors.ioerrorconnectionfailed, "connect failed")
passes message correctly error code ignored , err.number
&h80004005
.
throwing comexception("connect failed", ioerrors.ioerrorconnectionfailed)
results in no error being picked in calling application, presumably because error code not hresult
, positive, meaning success.
tl;dr how can throw exception c# such com interop translate 1 of recognised (positive) error codes above?
the "positive" vb style error numbers translated hresult
s "failure" severity , facility of facility_control
/0xa
, i.e. 0x800aafc9
.
you can suitable hresult
using:
int hresult = (int)(0x800a0000 | (int)errorcode);
this can raised calling process using plain comexception
, or throwing own subclass of comexception
:
/// <summary> /// exception returns icio error wrapped in exception. /// </summary> internal class icioerrorexception : comexception { internal icioerrorexception(icio.ioerrors errorcode, string message) : base(message) { this.hresult = (int)(0x800a0000 | (int)errorcode); } }
Comments
Post a Comment