Hans Leidekker (@hans) commented about dlls/rometadata/tests/rometadata.c:
+ * specifying the target table is the TypeDef, TypeRef or TypeSpec table, respectively + * 2. shift the 3-byte row index left by 2 bits and OR into the 2-bit encoding from step 1 + * 3. compress the resulting value (II.23.2) + */ + len = encode_int(__LINE__, (RidFromToken(kvpair_ref) << 2) | 1, encoded); + memcpy(&propertyset_ifaces[2].exp_sig[propertyset_ifaces[2].exp_sig_len], encoded, len); + propertyset_ifaces[2].exp_sig_len += len; + /* Copy the remaining signature for the <string, object> template params. */ + memcpy(&propertyset_ifaces[2].exp_sig[propertyset_ifaces[2].exp_sig_len], keyvaluepair_tmpl_params, sizeof(keyvaluepair_tmpl_params)); + propertyset_ifaces[2].exp_sig_len += sizeof(keyvaluepair_tmpl_params); + + hr = IMetaDataImport_FindTypeDefByName(md_import, L"Windows.Foundation.Collections.IPropertySet", mdTokenNil, &type_def); + ok(hr == S_OK, "got hr %#lx\n", hr); + hr = IMetaDataImport_EnumInterfaceImpls(md_import, &henum, type_def, &impl, 1, NULL); + ok(hr == S_OK, "got hr %#lx\n", hr); + /* IPropertySet should inherit from IObservableMap<string, object>, IMap<string, object>, and IIterable<IKeyValuePair<string, object>>. */ Note that WinRT doesn't have inheritance in the sense that you can define a derived class that extends a base class. The 'requires' keyword says that any object that implements this interface must also implement the listed interfaces. They don't necessarily share methods or properties with this interface.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/11719#note_149503