首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SafeArray的COM SafeArray

SafeArray的COM SafeArray
EN

Stack Overflow用户
提问于 2012-08-06 21:38:46
回答 1查看 2.3K关注 0票数 3

我的IDL中有以下内容,MIDL似乎很喜欢。我正在尝试创建一个返回字节数组(不是矩阵)数组的方法。我在C++方面遇到了一个问题,编译器既不喜欢ATL::CComSafeArray<LPSAFEARRAY>也不喜欢ATL::CComSafeArray<ATL::CComSafeArray<byte> >。我得到了一个error C2039: 'type' : is not a member of 'ATL::_ATL_AutomationType<T>'

代码语言:javascript
复制
[id(1001)] HRESULT Find([out] SAFEARRAY(SAFEARRAY(byte))* features);

STDMETHOD(Find)(/*[out]*/ SAFEARRAY** features)

有没有更好的方法来传递字节数组(我正在跨越进程边界)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-07 03:41:53

好的,试试这个(C++ ATL服务器):

代码语言:javascript
复制
[
    object,
    uuid(F7F8E65F-EBAD-4191-B916-2DB2A1EA0720),
    dual,
    nonextensible,
    helpstring("IAofA Interface"),
    pointer_default(unique)
]
interface IAofA : IDispatch{
    [id(1), helpstring("method GetArray")] HRESULT GetArray([out,retval] VARIANT* pVals);
};

CComVariant CreateByteArrayAsVariant(BYTE *pData, ULONG size)
{
    CComSafeArray<BYTE> sa(size);
    for (ULONG i=0; i!=size; ++i)
    {
        sa.SetAt(i, pData[i]);
    }

    CComVariant var(sa);

    return var;
}


STDMETHODIMP CAofA::GetArray(VARIANT* pVals)
{
    CComSafeArray<VARIANT> sa(3);

    BYTE a[] = {1};
    BYTE b[] = {1, 2};
    BYTE c[] = {3, 2, 1};

    sa.SetAt(0, CreateByteArrayAsVariant(a, sizeof(a)));
    sa.SetAt(1, CreateByteArrayAsVariant(b, sizeof(b)));
    sa.SetAt(2, CreateByteArrayAsVariant(c, sizeof(c)));

    CComVariant var(sa);

    var.Detach(pVals);

    return S_OK;
}

这是一个VB.net客户端:

代码语言:javascript
复制
Imports AofAServerLib

Module Module1

    Sub Main()
        Dim s As IAofA = New AofA
        Dim a() = s.GetArray

        For i As Integer = 0 To a.Length - 1
            For j As Integer = 0 To a(i).Length - 1
                Console.Write(a(i)(j))
                Console.Write(" ")
            Next
            Console.WriteLine()
        Next
    End Sub

End Module

没有错误检查,但它是有效的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11829424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档