May 07, 2004 Bug in Registry.d | ||||
---|---|---|---|---|
| ||||
I'm try to rebuild phobos with debug info. Got the error in registry.d std\windows\registry.d(972): no property 'message' for type 'RegistryException' the code is as follows: ---------------- catch(RegistryException x) { assert(x.error == code); if(string != x.toString()) { printf( "UnitTest failure for RegistryException:\n" " x.message[%d;\"%.*s\"] does not equal [%d;\"%.*s\"]\n" , x.message.length, x.message , string.length, string); } assert(message == x.msg); } ------------- Since RegistryException is ultimately derived from Exception, this class has the variable called msg not message. So x.message needs to be changed to x.msg |
May 07, 2004 Re: Bug in Registry.d | ||||
---|---|---|---|---|
| ||||
Posted in reply to dickl | This is because I'd developed, and submitted to Walter, the class Win32Exception in a separate file - std/windows/exceptions.d - and he appears to have defined his own, erroneously simplified, version within registry.d, rather than either incorporating the new file into Phobos, or the full definition into registry.d. I have no control over either of these, but I expect Walter'll fix it up next time. For the moment, you might just change Win32Exception in registry.d to the following: /// This class is the root exception class for Win32, and provides mechanisms /// for representing Win32 error codes and extracting error translation messages. class Win32Exception : Exception { /// \name Construction //@{ public: /// \brief Creates an instance of the exception /// /// \param message The message associated with the exception this(char[] message) { this(message, GetLastError()); } /// \brief Creates an instance of the exception, with the given /// /// \param message The message associated with the exception /// \param error The Win32 error number associated with the exception this(char[] message, int error) { char sz[24]; // Enough for the three " ()" characters and a 64-bit integer value int cch = wsprintfA(sz, " (%d)", error); m_message = message; m_error = error; super(message ~ sz[0 .. cch]); } //@} /// \name Attributes //@{ public: /// Returns the message string associated with the exception char[] message() { return m_message; } /// Returns the Win32 error code associated with the exception int error() { return m_error; } /// Converts the error code into a string, searching the default system message libraries char[] lookupError() { return FormatMessage(m_error); } /// Converts the error code into a string, searching the given message module /// /// \note Not yet implemented char[] lookupError(char[] moduleName) { return FormatMessage(m_error, moduleName); } //@} /// \name Members //@{ private: char[] m_message; int m_error; //@} } "dickl" <dick221z@yahoo.com> wrote in message news:c7grmo$1g2h$1@digitaldaemon.com... > I'm try to rebuild phobos with debug info. > Got the error in registry.d > std\windows\registry.d(972): no property 'message' for type > 'RegistryException' > > the code is as follows: > ---------------- > catch(RegistryException x) > { > assert(x.error == code); > if(string != x.toString()) > { > printf( "UnitTest failure for RegistryException:\n" > " x.message[%d;\"%.*s\"] does not equal [%d;\"%.*s\"]\n" > , x.message.length, x.message > , string.length, string); > } > assert(message == x.msg); > } > > ------------- > Since RegistryException is ultimately derived from Exception, this class has > the variable called msg not message. > So x.message needs to be changed to x.msg > > > > |
Copyright © 1999-2021 by the D Language Foundation