widl #12: BSTR defaultvalues

Huw D M Davies h.davies1 at physics.ox.ac.uk
Fri Jan 14 10:39:55 CST 2005


        Huw Davies <huw at codeweavers.com>
        Add support for BSTR default values.
-- 
Huw Davies
huw at codeweavers.com
--- tools/widl/write_msft.c	2005-01-14 16:37:33.723265991 +0000
+++ tools/widl/write_msft.c	2005-01-14 16:34:23.355978780 +0000
@@ -1077,11 +1077,24 @@
         return;
       }
     case VT_BSTR:
-        warning("default value BSTR %s\n", (char*)value);
-        break;
+      {
+        char *s = (char *) value;
+        int len = strlen(s), seg_len = (len + 6 + 3) & ~0x3;
+        int offset = ctl2_alloc_segment(typeinfo->typelib, MSFT_SEG_CUSTDATA, seg_len, 0);
+        *((unsigned short *)&typeinfo->typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset]) = vt;
+        *((unsigned int *)&typeinfo->typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+2]) = len;        
+        memcpy(&typeinfo->typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+6], value, len);
+        len += 6;
+        while(len < seg_len) {
+            *((char *)&typeinfo->typelib->typelib_segment_data[MSFT_SEG_CUSTDATA][offset+len]) = 0x57;
+            len++;
+        }
+        *out = offset;
+        return;
+      }
 
-      default:
-          warning("can't write value of type %d yet\n", vt);
+    default:
+        warning("can't write value of type %d yet\n", vt);
     }
     return;
 }



More information about the wine-patches mailing list