博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何构造一个元素类型为Struct的SafeArray
阅读量:4190 次
发布时间:2019-05-26

本文共 1428 字,大约阅读时间需要 4 分钟。

在有些时候,我们需要构造一个元素类型为StructSafeArray,在MSDN并没有文档解释到底应该如何去做到这一点,下面的代码片断解释了如何去构造这样一个SafeArray

假设我们有如下的Struct

struct myStruct

{

    unsigned char Name[255];

    short Kind;

};

 

为了构造一个SafeArray,元素类型为mxStruct,首先我们必须得拿到mxStruct所对应的IRecordInfo接口,这可以通过调用GetRecordInfoFromGuids函数实现:

    #import "TestStruct.tlb" no_namespace

 

    HRESULT hr;

    IRecordInfo *pRecordInfo;

    hr = GetRecordInfoFromGuids(

        __uuidof(TestStruct),

        1,

        0,

        LOCALE_USER_DEFAULT,

        __uuidof(mxStruct),

        &pRecordInfo);

 

GetRecordInfoFromGuids在注册表中查询对应的Record信息,这个注册表信息位于HKCR/Record下,同时,对应的TypeLib也必须被注册在HKCR/TypeLib下面,这样GetRecordInfoFromGuids才可以查到对应的信息并返回IRecordInfo*指针。当获得了这个指针的时候,便可以通过CreateSafeArrayVectorEx来构造SafeArray

      SAFEARRAY *pArray = SafeArrayCreateVectorEx(VT_RECORD, 0, 3, pRecordInfo);

 

该行调用SafeArrayCreateVectorEx构造一个元素为pRecordInfo指定的结构,也就是myStructSafeArrayLowBound0,元素个数为3

对这个SafeArray中的元素赋值可以通过SafeArrayAccessDataSafeArrayUnaccessData做到:

    myStruct *pStructs;

    SafeArrayAccessData(pArray, (void **)&pStructs);

 

    strcpy((char *)&pStructs[0].Name[0], "N1");

    pStructs[0].Kind = 0;

 

    strcpy((char *)&pStructs[1].Name[0], "N2");

    pStructs[0].Kind = 1;

 

    strcpy((char *)&pStructs[2].Name[0], "N3");

    pStructs[0].Kind = 2;

 

    SafeArrayUnaccessData(pArray);

 

SafeArrayAccessData获得数组的指针,用于修改数据,并LockSafeArray,防止被SafeArray被释放。而SafeArrayUnaccessDataUnlock这个SafeArray

至此SafeArray构造完毕,可以传递给其他的COM组件了。如果有兴趣的话,可以参考MSDN Forum中提出的一个类似的问题:

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1739633

你可能感兴趣的文章
中化CIO彭劲松:IT治理让我明明白白做事
查看>>
中国惠普公司企业计算及专业服务集团卫东:IT治理最重要就是保证技术与业务有效结合
查看>>
《给初学者的Windows Vista的补遗手册》之064
查看>>
《给初学者的Windows Vista的补遗手册》之063
查看>>
《给初学者的Windows Vista的补遗手册》之062
查看>>
《给初学者的Windows Vista的补遗手册》之057
查看>>
《给初学者的Windows Vista的补遗手册》之056
查看>>
《给初学者的Windows Vista的补遗手册》之045
查看>>
域名1元价,我也来注册一个
查看>>
《给初学者的Windows Vista的补遗手册》之037
查看>>
《给初学者的Windows Vista的补遗手册》之036
查看>>
《给初学者的Windows Vista的补遗手册》之035
查看>>
Spring开发指南 0.8 发布
查看>>
微软宣布将推出XNA Game Studio
查看>>
MySQL宣布加入微软Visual Studio工业伙伴计划
查看>>
菜鸟、夫子、玫林凯与测试
查看>>
无锁编程与分布式编程那个更适合多核CPU?
查看>>
多核系统中三种典型锁竞争的加速比分析
查看>>
多核新观念-象使用内存一样使用CPU?
查看>>
OpenMP创建线程中的锁及原子操作性能比较
查看>>