This code was introduced in 7d1e3691, but that commit did not account for pointers to normal C arrays.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- tools/widl/typelib.c | 4 ++-- tools/widl/write_msft.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/tools/widl/typelib.c b/tools/widl/typelib.c index e8dfcb1..2ebb50e 100644 --- a/tools/widl/typelib.c +++ b/tools/widl/typelib.c @@ -200,10 +200,10 @@ unsigned short get_type_vt(type_t *t) { if (match(type_array_get_element(t)->name, "SAFEARRAY")) return VT_SAFEARRAY; + return VT_PTR; } else - error("get_type_vt: array types not supported\n"); - return VT_PTR; + return VT_CARRAY;
case TYPE_INTERFACE: if(match(t->name, "IUnknown")) diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c index 913e1a6..9357fd8 100644 --- a/tools/widl/write_msft.c +++ b/tools/widl/write_msft.c @@ -1113,7 +1113,7 @@ static int encode_var(
if (target_type & 0x80000000) { mix_field = ((target_type >> 16) & 0x3fff) | VT_BYREF; - } else if (is_array(ref)) { + } else if (get_type_vt(ref) == VT_SAFEARRAY) { type_t *element_type = type_alias_get_aliasee(type_array_get_element(ref)); mix_field = get_type_vt(element_type) | VT_ARRAY | VT_BYREF; } else {
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- tools/widl/write_msft.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/tools/widl/write_msft.c b/tools/widl/write_msft.c index 9357fd8..5585a2f 100644 --- a/tools/widl/write_msft.c +++ b/tools/widl/write_msft.c @@ -2333,6 +2333,7 @@ static void add_type_typeinfo(msft_typelib_t *typelib, type_t *type) break; case TYPE_BASIC: case TYPE_POINTER: + case TYPE_ARRAY: break; default: error("add_entry: unhandled type 0x%x for %s\n",