From: Hans Leidekker <hans(a)codeweavers.com> winmd stores high and low word in opposite order from typelib. --- tools/widl/metadata.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/widl/metadata.c b/tools/widl/metadata.c index bd953c50d53..e02a82f6647 100644 --- a/tools/widl/metadata.c +++ b/tools/widl/metadata.c @@ -1779,13 +1779,16 @@ static UINT make_contract_value( const type_t *type, BYTE *buf ) static UINT make_version_value( const type_t *type, BYTE *buf ) { - UINT version = get_attrv( type->attrs, ATTR_VERSION ); + const version_t *version = get_attrp( type->attrs, ATTR_VERSION ); + UINT value; + + if (version) value = (version->major << 16) | version->minor; + else value = 1; buf[0] = 1; buf[1] = 0; - buf[2] = is_attr( type->attrs, ATTR_VERSION ) ? 0 : 1; - buf[3] = 0; - memcpy( buf + 4, &version, sizeof(version) ); + memcpy( buf + 2, &value, sizeof(value) ); + buf[6] = buf[7] = 0; return 8; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/8690