Added support for anonymous structs/unions on compilers that implement it.

diff --git a/ole/variant.c b/ole/variant.c
index b9233a9..b3a81d89 100644
--- a/ole/variant.c
+++ b/ole/variant.c
@@ -2206,7 +2206,7 @@
  * Convert currency to unsigned char
  */
 HRESULT WINAPI VarUI1FromCy(CY cyIn, BYTE* pbOut) {
-   double t = round((((double)cyIn.u.Hi * 4294967296.0) + (double)cyIn.u.Lo) / 10000);
+   double t = round((((double)cyIn.s.Hi * 4294967296.0) + (double)cyIn.s.Lo) / 10000);
    
    if (t > UI1_MAX || t < UI1_MIN) return DISP_E_OVERFLOW;
    
@@ -2412,7 +2412,7 @@
  * Convert currency to signed short
  */
 HRESULT WINAPI VarI2FromCy(CY cyIn, short* psOut) {
-   double t = round((((double)cyIn.u.Hi * 4294967296.0) + (double)cyIn.u.Lo) / 10000);
+   double t = round((((double)cyIn.s.Hi * 4294967296.0) + (double)cyIn.s.Lo) / 10000);
    
    if (t > I2_MAX || t < I2_MIN) return DISP_E_OVERFLOW;
    
@@ -2605,7 +2605,7 @@
  * Convert currency to signed long
  */
 HRESULT WINAPI VarI4FromCy(CY cyIn, LONG* plOut) {
-   double t = round((((double)cyIn.u.Hi * 4294967296.0) + (double)cyIn.u.Lo) / 10000);
+   double t = round((((double)cyIn.s.Hi * 4294967296.0) + (double)cyIn.s.Lo) / 10000);
    
    if (t > I4_MAX || t < I4_MIN) return DISP_E_OVERFLOW;
    
@@ -2779,7 +2779,7 @@
  * Convert currency to float
  */
 HRESULT WINAPI VarR4FromCy(CY cyIn, FLOAT* pfltOut) {
-   *pfltOut = (FLOAT)((((double)cyIn.u.Hi * 4294967296.0) + (double)cyIn.u.Lo) / 10000);
+   *pfltOut = (FLOAT)((((double)cyIn.s.Hi * 4294967296.0) + (double)cyIn.s.Lo) / 10000);
    
    return S_OK;
 }
@@ -2929,7 +2929,7 @@
  * Convert currency to double
  */
 HRESULT WINAPI VarR8FromCy(CY cyIn, double* pdblOut) {
-   *pdblOut = (double)((((double)cyIn.u.Hi * 4294967296.0) + (double)cyIn.u.Lo) / 10000);
+   *pdblOut = (double)((((double)cyIn.s.Hi * 4294967296.0) + (double)cyIn.s.Lo) / 10000);
    
    return S_OK;
 }
@@ -3120,7 +3120,7 @@
  * Convert currency to date
  */
 HRESULT WINAPI VarDateFromCy(CY cyIn, DATE* pdateOut) {
-   *pdateOut = (DATE)((((double)cyIn.u.Hi * 4294967296.0) + (double)cyIn.u.Lo) / 10000);
+   *pdateOut = (DATE)((((double)cyIn.s.Hi * 4294967296.0) + (double)cyIn.s.Lo) / 10000);
 
    if (*pdateOut > DATE_MAX || *pdateOut < DATE_MIN) return DISP_E_TYPEMISMATCH;
    return S_OK;
@@ -3537,7 +3537,7 @@
  * Convert currency to boolean
  */
 HRESULT WINAPI VarBoolFromCy(CY cyIn, VARIANT_BOOL* pboolOut) {
-      if (cyIn.u.Hi || cyIn.u.Lo) *pboolOut = -1;
+      if (cyIn.s.Hi || cyIn.s.Lo) *pboolOut = -1;
       else *pboolOut = 0;
       
       return S_OK;
@@ -3741,7 +3741,7 @@
  * Convert currency to signed char
  */
 HRESULT WINAPI VarI1FromCy(CY cyIn, CHAR* pcOut) {
-   double t = round((((double)cyIn.u.Hi * 4294967296.0) + (double)cyIn.u.Lo) / 10000);
+   double t = round((((double)cyIn.s.Hi * 4294967296.0) + (double)cyIn.s.Lo) / 10000);
    
    if (t > CHAR_MAX || t < CHAR_MIN) return DISP_E_OVERFLOW;
    
@@ -3975,7 +3975,7 @@
  * Convert currency to unsigned short
  */
 HRESULT WINAPI VarUI2FromCy(CY cyIn, USHORT* pusOut) {
-   double t = round((((double)cyIn.u.Hi * 4294967296.0) + (double)cyIn.u.Lo) / 10000);
+   double t = round((((double)cyIn.s.Hi * 4294967296.0) + (double)cyIn.s.Lo) / 10000);
    
    if (t > UI2_MAX || t < UI2_MIN) return DISP_E_OVERFLOW;
       
@@ -4123,7 +4123,7 @@
  * Convert currency to unsigned long
  */
 HRESULT WINAPI VarUI4FromCy(CY cyIn, ULONG* pulOut) {
-   double t = round((((double)cyIn.u.Hi * 4294967296.0) + (double)cyIn.u.Lo) / 10000);
+   double t = round((((double)cyIn.s.Hi * 4294967296.0) + (double)cyIn.s.Lo) / 10000);
    
    if (t > UI4_MAX || t < UI4_MIN) return DISP_E_OVERFLOW;
 
@@ -4137,8 +4137,8 @@
  * Convert unsigned char to currency
  */
 HRESULT WINAPI VarCyFromUI1(BYTE bIn, CY* pcyOut) {
-   pcyOut->u.Hi = 0;
-   pcyOut->u.Lo = ((ULONG)bIn) * 10000;
+   pcyOut->s.Hi = 0;
+   pcyOut->s.Lo = ((ULONG)bIn) * 10000;
    
    return S_OK;
 }
@@ -4148,9 +4148,9 @@
  * Convert signed short to currency
  */
 HRESULT WINAPI VarCyFromI2(short sIn, CY* pcyOut) {
-   if (sIn < 0) pcyOut->u.Hi = -1;
-   else pcyOut->u.Hi = 0;
-   pcyOut->u.Lo = ((ULONG)sIn) * 10000;
+   if (sIn < 0) pcyOut->s.Hi = -1;
+   else pcyOut->s.Hi = 0;
+   pcyOut->s.Lo = ((ULONG)sIn) * 10000;
    
    return S_OK;
 }
@@ -4161,9 +4161,9 @@
  */
 HRESULT WINAPI VarCyFromI4(LONG lIn, CY* pcyOut) {
       double t = (double)lIn * (double)10000;
-      pcyOut->u.Hi = (LONG)(t / (double)4294967296.0);
-      pcyOut->u.Lo = (ULONG)fmod(t, (double)4294967296.0);
-      if (lIn < 0) pcyOut->u.Hi--;
+      pcyOut->s.Hi = (LONG)(t / (double)4294967296.0);
+      pcyOut->s.Lo = (ULONG)fmod(t, (double)4294967296.0);
+      if (lIn < 0) pcyOut->s.Hi--;
    
       return S_OK;
 }
@@ -4174,9 +4174,9 @@
  */
 HRESULT WINAPI VarCyFromR4(FLOAT fltIn, CY* pcyOut) {
    double t = round((double)fltIn * (double)10000);
-   pcyOut->u.Hi = (LONG)(t / (double)4294967296.0);
-   pcyOut->u.Lo = (ULONG)fmod(t, (double)4294967296.0);
-   if (fltIn < 0) pcyOut->u.Hi--;
+   pcyOut->s.Hi = (LONG)(t / (double)4294967296.0);
+   pcyOut->s.Lo = (ULONG)fmod(t, (double)4294967296.0);
+   if (fltIn < 0) pcyOut->s.Hi--;
    
    return S_OK;
 }
@@ -4187,9 +4187,9 @@
  */
 HRESULT WINAPI VarCyFromR8(double dblIn, CY* pcyOut) {
    double t = round(dblIn * (double)10000);
-   pcyOut->u.Hi = (LONG)(t / (double)4294967296.0);
-   pcyOut->u.Lo = (ULONG)fmod(t, (double)4294967296.0);
-   if (dblIn < 0) pcyOut->u.Hi--;
+   pcyOut->s.Hi = (LONG)(t / (double)4294967296.0);
+   pcyOut->s.Lo = (ULONG)fmod(t, (double)4294967296.0);
+   if (dblIn < 0) pcyOut->s.Hi--;
 
    return S_OK;
 }
@@ -4200,9 +4200,9 @@
  */
 HRESULT WINAPI VarCyFromDate(DATE dateIn, CY* pcyOut) {
    double t = round((double)dateIn * (double)10000);
-   pcyOut->u.Hi = (LONG)(t / (double)4294967296.0);
-   pcyOut->u.Lo = (ULONG)fmod(t, (double)4294967296.0);
-   if (dateIn < 0) pcyOut->u.Hi--;
+   pcyOut->s.Hi = (LONG)(t / (double)4294967296.0);
+   pcyOut->s.Lo = (ULONG)fmod(t, (double)4294967296.0);
+   if (dateIn < 0) pcyOut->s.Hi--;
 
    return S_OK;
 }
@@ -4221,9 +4221,9 @@
  * Convert boolean to currency
  */
 HRESULT WINAPI VarCyFromBool(VARIANT_BOOL boolIn, CY* pcyOut) {
-   if (boolIn < 0) pcyOut->u.Hi = -1;
-   else pcyOut->u.Hi = 0;
-   pcyOut->u.Lo = (ULONG)boolIn * (ULONG)10000;
+   if (boolIn < 0) pcyOut->s.Hi = -1;
+   else pcyOut->s.Hi = 0;
+   pcyOut->s.Lo = (ULONG)boolIn * (ULONG)10000;
    
    return S_OK;
 }
@@ -4233,9 +4233,9 @@
  * Convert signed char to currency
  */
 HRESULT WINAPI VarCyFromI1(CHAR cIn, CY* pcyOut) {
-   if (cIn < 0) pcyOut->u.Hi = -1;
-   else pcyOut->u.Hi = 0;
-   pcyOut->u.Lo = (ULONG)cIn * (ULONG)10000;
+   if (cIn < 0) pcyOut->s.Hi = -1;
+   else pcyOut->s.Hi = 0;
+   pcyOut->s.Lo = (ULONG)cIn * (ULONG)10000;
    
    return S_OK;
 }
@@ -4245,8 +4245,8 @@
  * Convert unsigned short to currency
  */
 HRESULT WINAPI VarCyFromUI2(USHORT usIn, CY* pcyOut) {
-   pcyOut->u.Hi = 0;
-   pcyOut->u.Lo = (ULONG)usIn * (ULONG)10000;
+   pcyOut->s.Hi = 0;
+   pcyOut->s.Lo = (ULONG)usIn * (ULONG)10000;
    
    return S_OK;
 }
@@ -4257,8 +4257,8 @@
  */
 HRESULT WINAPI VarCyFromUI4(ULONG ulIn, CY* pcyOut) {
    double t = (double)ulIn * (double)10000;
-   pcyOut->u.Hi = (LONG)(t / (double)4294967296.0);
-   pcyOut->u.Lo = (ULONG)fmod(t, (double)4294967296.0);
+   pcyOut->s.Hi = (LONG)(t / (double)4294967296.0);
+   pcyOut->s.Lo = (ULONG)fmod(t, (double)4294967296.0);
       
    return S_OK;
 }