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