标签: safearray

通过COM发送和接收数组

通过COM接收和发送数组的正确方法是什么?到目前为止,这是我的尝试:包含在变体中的双重安全阵列.

//takes variant holding safearray of doubles
//returns a similar variant having multipled every element by 2
STDMETHODIMP MyComClass::safearraytimestwo(VARIANT in, VARIANT* out)
{
    CComSafeArray<double> sa_in;
    sa_in.Attach(*in.pparray);
    ULONG size = sa_in.GetCount();

    CComSafeArray<double> *out_sa = new CComSafeArray<double>(size);

    for (long i=0;i<size;i++)
        out_sa->SetAt(i,sa_in[i]*2);

    out = new CComVariant(out_sa);
    return S_OK;
}
Run Code Online (Sandbox Code Playgroud)

问题: - 当前编译在循环操作上失败:error C2679: binary '=' : no operator found which takes a right-hand operand of type 'ATL::_ATL_AutomationType<DOUBLE>::_typewrapper' (or there is no acceptable conversion) 编辑:解决使用SetAt()而不是operator[] - 我应该out_sa在堆上声明吗?在取消分配时它会out …

c++ com variant safearray

3
推荐指数
1
解决办法
7623
查看次数

德尔福的二维Safearray?

我需要单元测试一个COM方法,我需要创建一个类型为字符串的二维Safearray.

怎么做?

delphi com safearray delphi-2010

3
推荐指数
1
解决办法
998
查看次数

SAFEARRAY var 类型存储在哪里?

我想了解 SAFEARRAY 的实现。

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

有人在下面的 MSDN 页面上评论说,高字cLocks保持类型信息:MSDN 上的 SAFEARRAY 结构

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

com automation safearray

3
推荐指数
1
解决办法
1413
查看次数

指向存储为集合/字典项VBA的数组的指针

对于变量数组,其中每个元素都是一个双数组,我可以执行以下操作:

Public Declare PtrSafe Sub CopyMemoryArray Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination() As Any, ByRef Source As Any, ByVal Length As Long)

Sub test()
    Dim vntArr() as Variant
    Dim A() as Double
    Dim B() as Double

    Redim vntArr(1 to 10)
    Redim A(1 to 100, 1 to 200)
    vntArr(1) = A
    CopyMemoryArray B, ByVal VarPtr(vntArr(1)) + 8, PTR_LENGTH '4 or 8
    'Do something
    ZeroMemoryArray B, PTR_LENGTH
End Sub
Run Code Online (Sandbox Code Playgroud)

然后A和B将指向内存中的相同块.(设置W = vntArr(1)会创建一个副本.对于非常大的数组,我想避免这种情况.)

我正在尝试做同样的事情,但是有了收藏:

Sub test()
    Dim col as Collection
    Dim A() as …
Run Code Online (Sandbox Code Playgroud)

vb6 excel vba safearray excel-vba

3
推荐指数
2
解决办法
843
查看次数

如何从多维PSafeArray中获取数据?

我需要从PSafeArrayDelphi中读取数据.
PSafeArray是由在C#中开发的DLL中实现的方法返回的.此方法返回二维字符串数组string[,].如何PSafeArray在Delphi中阅读这样的结果?

c# delphi delphi-7 safearray

2
推荐指数
1
解决办法
1495
查看次数

何时使用 SafeArrayAccessData 来锁定 SAFEARRAY

我有一个关于何时需要使用 SafeArrayAccessData 来锁定由托管代码传递的 SAFEARRAY 的问题。这是我们的代码。VARIANT 由托管代码通过字符串数组传递。在代码审查期间,有人建议使用 SafeArrayAccessData/SafeArrayUnAccessData。但他不确定为什么以及有什么好处。你能分享一些你的经验吗?谢谢!

STDMETHODIMP Base::Method1(VARIANT values, VARIANT_BOOL result)
{
    CComSafeArray<BSTR> ids;
    ids.Attach(values.parray);

    unsigned int size = ids.GetCount();
    for(unsigned int i = 0; i < size; ++i)
    {
    // use ids[i] here
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

c++ com variant safearray

2
推荐指数
1
解决办法
3346
查看次数

如何访问从 C++ 中的 COM 对象返回的 VARIANT 数据类型中的 SAFE ARRAY?

我正在使用 COM 对象。我调用 COM 对象的函数,此函数返回包含我的设备列表的 SAFE ARRAY 的 VARIANT 数据类型。我如何使用这个 VARIANT 来访问我的设备的 SAFEARRY。

  VARIANT namList; 
  SAFEARRAY* myequip;
  namList=str->GetNames();
Run Code Online (Sandbox Code Playgroud)

c++ arrays com variant safearray

1
推荐指数
1
解决办法
1891
查看次数

标签 统计

safearray ×7

com ×5

c++ ×3

variant ×3

delphi ×2

arrays ×1

automation ×1

c# ×1

delphi-2010 ×1

delphi-7 ×1

excel ×1

excel-vba ×1

vb6 ×1

vba ×1