digitalmars.D.learn - Compilation error when using a extern function ?
- tsalm <tsalm free.fr> Nov 20 2008
- "Denis Koroskin" <2korden gmail.com> Nov 20 2008
- tsalm <tsalm free.fr> Nov 21 2008
Hello,
I'm on DMD 1.036.
When I'm compiling this code :
// -------------CODE-----------------------
enum ColorValues:uint
{
AliceBlue = 0xF0F8FFFF
,AntiqueWhite = 0xF8ECD8FF
,Aqua = 0x00FFFFFF
,Aquamarine = 0x80FFD0FF
,Azure = 0xF0FFFFFF
,Beige = 0xF8F4E0FF
,Bisque = 0xFFE4C8FF
[...]
Color convertToColor(uint val)
{
ubyte[4] colorVal = *cast(ubyte*)&val;
return Color( colorVal[0]
,colorVal[1]
,colorVal[2]
,colorVal[3]
);
}
class DFLCalendar:Panel
{
// Graphicals objects
protected
{
// Colors default preferences :
const Color colorPanMonth =
convertToColor(cast(uint)ColorValues.MidnightBlue);
const Color colorPanDays =
convertToColor(cast(uint)ColorValues.White);
const uint heightPanMonth = 16 ;
const uint widthButChangeMonth = 10;
[...]
// -------------END CODE-------------------
The compiler return me the error :
tools\gui\tools\DFLCalendar.d(29): Error: cannot evaluate
convertToColor(404254975u) at compile time
Line 29 corresponds to "const Color colorPanMonth =
convertToColor(cast(uint)ColorValues.MidnightBlue);"
Thanks in advance for your help,
TSalm
Nov 20 2008
21.11.08 в 01:57 tsalm в своём письме писал(а):Hello, I'm on DMD 1.036. When I'm compiling this code : // -------------CODE----------------------- enum ColorValues:uint { AliceBlue = 0xF0F8FFFF ,AntiqueWhite = 0xF8ECD8FF ,Aqua = 0x00FFFFFF ,Aquamarine = 0x80FFD0FF ,Azure = 0xF0FFFFFF ,Beige = 0xF8F4E0FF ,Bisque = 0xFFE4C8FF [...] Color convertToColor(uint val) { ubyte[4] colorVal = *cast(ubyte*)&val; return Color( colorVal[0] ,colorVal[1] ,colorVal[2] ,colorVal[3] ); } class DFLCalendar:Panel { // Graphicals objects protected { // Colors default preferences : const Color colorPanMonth = convertToColor(cast(uint)ColorValues.MidnightBlue); const Color colorPanDays = convertToColor(cast(uint)ColorValues.White); const uint heightPanMonth = 16 ; const uint widthButChangeMonth = 10; [...] // -------------END CODE------------------- The compiler return me the error : tools\gui\tools\DFLCalendar.d(29): Error: cannot evaluate convertToColor(404254975u) at compile time Line 29 corresponds to "const Color colorPanMonth = convertToColor(cast(uint)ColorValues.MidnightBlue);" Thanks in advance for your help, TSalm
I wouldn't recommend you to use that trick, you may have problems with Endianess. But in case you don't care I would suggest you to use the following "cast" instead: union ColorProxy { uint color; struct { ubyte red; ubyte green; ubyte blue; ubyte alpha; } } ColorProxy proxy; proxy.color = ColorValues.Aqua; return Color(proxy.red, proxy.green, proxy.blue, proxy.alpha);
Nov 20 2008
Le Fri, 21 Nov 2008 00:34:03 +0100, Denis Koroskin <2korden gmail.com> a crit:union ColorProxy { uint color; struct { ubyte red; ubyte green; ubyte blue; ubyte alpha; } } ColorProxy proxy; proxy.color = ColorValues.Aqua; return Color(proxy.red, proxy.green, proxy.blue, proxy.alpha);
Yes it's a better way. Thanks.
Nov 21 2008








tsalm <tsalm free.fr>