On 04.02.2016 12:31, Alistair Leslie-Hughes wrote:
+[ + object, + uuid(0c733a11-2a1c-11ce-ade5-00aa0044773d), + pointer_default(unique) +] +interface IColumnsInfo : IUnknown +{ + [local] + HRESULT GetColumnInfo([in, out] DBORDINAL *columns,[out, size_is(*columns)] DBCOLUMNINFO **colinfo, + [out] OLECHAR *stringsbuffer); + + [call_as(GetColumnInfo)] + HRESULT RemoteGetColumnInfo([in, out] DBORDINAL *columns, [out, size_is((ULONG)*columns)] DBCOLUMNINFO **col_info, + [out, size_is((ULONG)*columns)] DBBYTEOFFSET **name_offsets, + [out, size_is((ULONG)*columns)] DBBYTEOFFSET **columnid_offsets, + [in, out] DBLENGTH *string_len, [in, out, unique, size_is((ULONG)*string_len)] OLECHAR **stringsbuffer, + [out] IErrorInfo **error); +
ULONG in SDK comes from DBORDINAL being ULONGLONG vs ULONG depending on bitness, I agree we probably don't have to duplicate that, and can always use cast. In any case size_is attribute is used in a wrong way, and at least one method prototype does not match SDK.