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
Permalink
Reply