首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏VBA 学习

    VBA数据类型Array

    1、VBA数组底层结构: VBA的数组在底层是SafeArray: 'https://docs.microsoft.com/zh-cn/windows/win32/api/oaidl/ns-oaidl-safearraybound Long ' // 该维的数组存取的下限,一般为0 End Type 'https://docs.microsoft.com/zh-cn/windows/win32/api/oaidl/ns-oaidl-safearray redirectedfrom=MSDN Type SafeArray cDims As Integer ' // 数组的维度 fFeatures As Integer ' 像c语言这样的语言,是有指针的,VBA数组的底层实现应该是使用了一个指针来引用SafeArray结构,而VarPtrArray(Arr)获取到的应该是指针的地址。 2、改变SafeArray的pvDataas地址会有什么情况: 既然知道了数组的内存结构,那我们就尝试把pvDataas改变看看会怎么样: Sub TestArray2() Dim Arr()

    99040发布于 2020-07-28
  • 来自专栏嵌入式项目开发

    QT应用编程: Qt数据类型和(ActiveX)COM接口数据类型对应关系

    DATE QFont IFontDisp* QPixmap IPictureDisp* QVariant VARIANT QVariantList (same as QList<QVariant>) SAFEARRAY (VARIANT) QStringList SAFEARRAY(BSTR) QByteArray SAFEARRAY(BYTE) QRect User defined type QSize User defined (VARIANT) QList<QVariant>& [in, out] SAFEARRAY(VARIANT)* QStringList, const QStringList& [in] SAFEARRAY (BSTR) QStringList& [in, out] SAFEARRAY(BSTR)* QByteArray, const QByteArray& [in] SAFEARRAY(BYTE) QByteArray & [in, out] SAFEARRAY(BYTE)* QObject* [in] IDispatch* QRect& [in, out] struct QRect (user defined) QSize

    1.4K30编辑于 2022-01-07
  • 来自专栏Gcow安全团队

    Internet Explorer漏洞分析(三)[上]——VBScript Scripting Engine初探

    date; BSTR bstrVal; IUnknown *punkVal; IDispatch *pdispVal; SAFEARRAY 图5 0x02 数组 数组存储结构由SAFEARRAY定义: typedef struct tagSAFEARRAY { USHORT cDims; USHORT fFeatures ; 其中各字段含义可参阅[Microsoft Docs——SAFEARRAY]https://docs.microsoft.com/en-us/windows/win32/api/oaidl/ns-oaidl-safearray 图28 0x06 参阅链接 •[Microsoft Docs——SAFEARRAY structure]https://docs.microsoft.com/en-us/windows/win32/api /oaidl/ns-oaidl-safearray•[Microsoft Docs——VARIANT structure]https://docs.microsoft.com/en-us/windows

    1.4K10发布于 2021-03-19
  • 来自专栏BigNerdCoding

    Swift 线程安全数组

    实践 /// A thread-safe array. public class SafeArray<Element> { fileprivate let queue = DispatchQueue (label: "Com.BigNerdCoding.SafeArray", attributes: .concurrent) fileprivate var array = [Element] () } // MARK: - Properties public extension SafeArray { var first: Element? (elements) } } } } public extension SafeArray { subscript(index: Int) 接下来,我们可以对传统的非并发安全数组和 SafeArray 进行以下比较: import Foundation import PlaygroundSupport // Thread-unsafe

    2.4K00发布于 2017-12-05
  • 来自专栏VBA 学习

    VBA一维数组转二维数组

    一维数组与一个多行单列二维数组的数据,在内存中的排列显然是一样的,所以,只要理解数组的底层类型,将一维数组转变为一个多行单列的二维数组就很简单了,只需要改变一下SafeArray就可以,不需要重新复制数据 ,使用完后要修改回去 'retpArray 记录临时开辟的2维数组的地址 Function OneDim2TwoDim(arr As Variant, rows As Long, retsa As SafeArray VBA.IsArray(arr) Then OneDim2TwoDim = -1 Exit Function End If Dim sa As SafeArray 所以不能直接修改一维数组arr,另外引入一个2维数组 Dim tmp() As Variant ReDim tmp(0, 0) As Variant Dim tmpsa As SafeArray 16, VarPtr(tmpsa.rgsabound(0).cElements), 16 OneDim2TwoDim = tmp End Function 这里需要注意的是一维数组的SafeArray

    2.8K00发布于 2021-06-22
  • 来自专栏VBA 学习

    VBA数组深入学习

    数组在VBA里是一个数据类型,除了这一组顺序索引的元素之外,还有一个记录了数组一些信息的结构体SafeArray。 所以,上面的C1774F8指向的是SafeArray结构体,而并不是数组数据开始的地址: Sub Test() Dim a1() As Byte ReDim a1(1) As Byte p1 = VarPtrArray(a1) Dim p1value As Long CopyMemory VarPtr(p1value), p1, 4 Dim sa As SafeArray 1F5D28F8 1890A4A0 1890A4A0 可以看到sa.pvDataas和VarPtr(a1(0))的地址是同一个地址,这个才是真正的数组数据开始的地方,SafeArray SafeArray记录的数据更多,而且记录的位置也不是在紧挨着数据开始的前面,而是另外开辟空间来记录。 ?

    1.3K20发布于 2021-06-22
  • 来自专栏VBA 学习

    VBA多维数组转一维数组

    在数据类型Array中,我们知道了数组的底层结构,其中cDims就是指明数组维度的,那么,我们只需要通过修改内存中cDims的值,以及SafeArray中rgsabound记录的元素的个数,那么就可以实现将多维的数组转换为一维数组 SafeArrayBound cElements As Long '// 该维的长度 lLbound As Long ' // 该维的数组存取的下限,一般为0 End Type Private Type SafeArray Then ToOneDim = -1 Exit Function End If Dim ptr As Long Dim sa As SafeArray

    3.3K20发布于 2021-06-22
  • 来自专栏VBA 学习

    VBA获取数组的维度

    SafeArrayBound cElements As Long '// 该维的长度 lLbound As Long ' // 该维的数组存取的下限,一般为0 End Type Private Type SafeArray Then GetArrayDims = 0 Exit Function End If Dim ptr As Long Dim sa As SafeArray

    2.5K11发布于 2021-06-22
  • 来自专栏全栈程序员必看

    轻松解析excel文件 —-利用MFC读取excel文件

    /Excel的sheet集合 CRange currentRange;//当前操作区域 bool isLoad;//是否已经加载了某个sheet数据 COleSafeArray safeArray (ret_ary.vt & VT_ARRAY)) { return; } // safeArray.Clear(); safeArray.Attach(ret_ary); } / { long read_address[2]; VARIANT val; read_address[0] = iRow; read_address[1] = iColumn; safeArray.GetElement { long read_address[2]; VARIANT val; read_address[0] = iRow; read_address[1] = iColumn; safeArray.GetElement { long read_address[2]; VARIANT val; read_address[0] = iRow; read_address[1] = iColumn; safeArray.GetElement

    5.7K30编辑于 2022-09-07
  • 来自专栏全栈程序员必看

    MFC中使用COleVariant获取CMFCPropertyGridProperty属性窗口某个属性值

    BSTR bstrVal; IUnknown *punkVal; IDispatch *pdispVal; SAFEARRAY pbstrVal; IUnknown **ppunkVal; IDispatch **ppdispVal; SAFEARRAY

    2.7K20编辑于 2022-09-09
  • 来自专栏sofu456

    com组件中的数据类型

    */ IDispatch * pdispVal; /* VT_DISPATCH */ SAFEARRAY VT_UNKNOWN */ IDispatch ** ppdispVal; /* VT_BYREF|VT_DISPATCH */ SAFEARRAY

    1.1K40编辑于 2021-12-06
  • 来自专栏大学生计算机视觉学习DeepLearning

    2018最新mfc作为上位机接收硬件端USB或串口数据显示成图片 解决串口接收数据丢字节丢包问题

    CMFCApplication2Dlg::onComm() { // TODO: 在此处添加消息处理程序代码 VARIANT variant_inp; COleSafeArray safearray_inp ////////以下你可以根据自己的通信协议加入处理代码 variant_inp = m_ctrlComm.get_Input(); //读缓冲区 safearray_inp = variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len = safearray_inp.GetOneDimSize(); //得到有效数据长度 m_COMIndex) { if (m_COMIndex > 240 * 320 - 1) break; safearray_inp.GetElement

    3.7K30发布于 2018-08-30
  • 来自专栏猛牛哥的博客

    aardio v13.7 更新内容

    增加这一功能以后,我们可以将标准库直接放到用户库目录下使用(例如网站程序),注意"~\"或"~/"没有区别. 2、新增 com.SafeArray(元素类型,一个或多个数组元素) 函数用于创建COM安全数组

    96730发布于 2018-06-04
  • 来自专栏游戏开发司机

    C++:12---运算符重载

    #include <iostream> using namespace std; const int SIZE = 10; class Safearray { private: int arr[SIZE]; public: Safearray() { register int i; for(i = 0; i < SIZE 返回第一个元素 return arr[0]; } return arr[i]; } }; int main() { Safearray

    86630发布于 2021-02-03
  • 【C++类和数据抽象】赋值操作符

    自赋值检测(Self-assignment check) 旧资源释放(Resource cleanup) 新资源分配(New resource allocation) class SafeArray { int* data; size_t size; public: SafeArray& operator=(const SafeArray& other) { other.data, other.data + size, data); return *this; } }; 2.4 异常安全实现 基础实现存在异常安全隐患,改进方案: SafeArray & operator=(const SafeArray& other) { if(this !

    14110编辑于 2026-01-21
  • Java EE(9)——线程安全——锁升级&JUC&集合类

    args) { //实例化普通的顺序表 List<Integer> array = new ArrayList<>(); //将array转换为线程安全的safeArray List<Integer> safeArray = Collections.synchronizedList(array); } } 因为读写操作都进行了加锁,所以适用于读和写操作频率相对均衡的场景

    12210编辑于 2026-01-13
  • 来自专栏鸿鹄实验室

    利用 WMI and COM 绕过windows defender

    array SAFEARRAYBOUND rgsaBounds[1]; rgsaBounds[0].cElements = 1; rgsaBounds[0].lLbound = 0; SAFEARRAY

    1.3K50发布于 2021-11-12
  • 来自专栏MasiMaro 的技术博文

    COM学习(四)——COM中的数据类型

    BSTR bstrVal; IUnknown *punkVal; IDispatch *pdispVal; SAFEARRAY pbstrVal; IUnknown **ppunkVal; IDispatch **ppdispVal; SAFEARRAY

    1.5K30发布于 2019-02-25
  • 来自专栏Python1.0

    python的numpy向量化语句为什么会比for快?

    bstrVal; IUnknown *punkVal; IDispatch *pdispVal; SAFEARRAY *pbstrVal; IUnknown **ppunkVal; IDispatch **ppdispVal; SAFEARRAY

    1.2K20编辑于 2021-12-25
  • 来自专栏Gcow安全团队

    Internet Explorer漏洞分析(三)[下]——CVE-2014-6332

    0x03 参阅链接 •[Microsoft Docs——SAFEARRAY]https://docs.microsoft.com/en-us/windows/win32/api/oaidl/ns-oaidl-safearray

    1.3K20发布于 2021-03-22
领券