我有一个返回多维SAFEARRAY的COM接口。例如:
[
object,
dual,
uuid(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
]
interface ISomeInterface : IDispatch
{
[id(1)] HRESULT GetSafeArray([out, retval] SAFEARRAY(VARIANT)* multidimensionalSafeArray);
}
我尝试使用.NET中返回的SAFEARRAYs时遇到了问题,因为它们的尺寸是反转的。我不明白为什么默认封送程序不会将其尺寸调整过来。据我所知,解决这个问题的唯一方法是编写自己的自定义封送程序。但由于还有COM接口返回SAFEARRAYs与其他维度计数(一维,二维,三维)和其他类型(DATE,CY,long,double等),我需要找到一个通用的解决方案。我是否正确理解我必须编写所有编组操作来编组各种SAFEARRAY元素的类型(blittable类型,DATE,CY,IDispatch,IUnknown等)?