gpt4 book ai didi

com - SAFEARRAY var 类型存储在哪里?

转载 作者:行者123 更新时间:2023-12-01 08:31:38 25 4
gpt4 key购买 nike

我想了解 SAFEARRAY 的实现。

在我看来,SAFEARRAY 结构中没有用于存储元素类型信息的字段,例如 VT_I4(3) 或 VT_R4(4),但 SafeArrayGetVartype 函数返回正确的类型。

有人在下面的 MSDN 页面上评论说 cLocks 的高位字包含类型信息:SAFEARRAY structure on MSDN

但是当我通过类型库将 Long 和 Single 数组从 VBA 传递到 DLL 函数时,这些数组的 fFeatures 都是 0x80,cLocks 都是 0,并且 STLl SafeArrayGetVartype 可以告诉 VT_I4(3) 和 VT_R4(4)。

最佳答案

根据安全数组的创建方式,变体类型可能会存储在内存中,位于 SAFEARRAY 结构之前(从开始的偏移量 -4 处)。 fFeatures 中的 FADF_HAVEVARTYPE 标志表示该类型是否可用。

同样,FADF_HAVEIID 表示 GUID(参见 SafeArrayCreateEx)存储在偏移量 -16 处,可通过 SafeArrayGetIID 获得。 FADF_HAVEVARTYPEFADF_HAVEIID 永远不能同时存在(因为否则 VARTYPEGUID 会在内存中重叠),但是 SafeArrayGetVartype 足够聪明,可以在看到相应的功能标志时合成 VT_RECORDVT_DISPATCHVT_UNKNOWN 类型之一。

关于com - SAFEARRAY var 类型存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18784470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com