BYTE 和 COleVariant 相互转换

BYTE 和 COleVariant 相互转换#include     BOOL GetBinaryFromVariant(COleVariant & ovData, BYTE ** ppBuf, unsigned long * pcBufLen)  {    BOOL fRetVal = FALSE;      //Binary data is stored in the variant as an array of

大家好,又见面了,我是你们的朋友全栈君。

  1. #include <Afxdisp.h>  
  2.   
  3. BOOL GetBinaryFromVariant(COleVariant & ovData, BYTE ** ppBuf, unsigned long * pcBufLen)  
  4. {  
  5.   BOOL fRetVal = FALSE;  
  6.   
  7.   //Binary data is stored in the variant as an array of unsigned char  
  8.   if(ovData.vt == (VT_ARRAY|VT_UI1))  // (OLE SAFEARRAY)  
  9.   {  
  10.     //Retrieve size of array  
  11.     *pcBufLen = ovData.parray->rgsabound[0].cElements;  
  12.   
  13.     *ppBuf = new BYTE[*pcBufLen]; //Allocate a buffer to store the data  
  14.     if(*ppBuf != NULL)  
  15.     {  
  16.       void * pArrayData;  
  17.   
  18.       //Obtain safe pointer to the array  
  19.       SafeArrayAccessData(ovData.parray,&pArrayData);  
  20.   
  21.       //Copy the bitmap into our buffer  
  22.       memcpy(*ppBuf, pArrayData, *pcBufLen);  
  23.   
  24.       //Unlock the variant data  
  25.       SafeArrayUnaccessData(ovData.parray);  
  26.       fRetVal = TRUE;  
  27.     }  
  28.   }  
  29.   return fRetVal;  
  30. }  
  31.   
  32. BOOL PutBinaryIntoVariant(COleVariant * ovData, BYTE * pBuf, unsigned long cBufLen)  
  33. {  
  34.   BOOL fRetVal = FALSE;  
  35.   VARIANT var;  
  36.   VariantInit(&var);  //Initialize our variant  
  37.   
  38.   //Set the type to an array of unsigned chars (OLE SAFEARRAY)  
  39.   var.vt = VT_ARRAY | VT_UI1;  
  40.   
  41.   //Set up the bounds structure  
  42.   SAFEARRAYBOUND  rgsabound[1];  
  43.   rgsabound[0].cElements = cBufLen;  
  44.   rgsabound[0].lLbound = 0;  
  45.   
  46.   //Create an OLE SAFEARRAY  
  47.   var.parray = SafeArrayCreate(VT_UI1,1,rgsabound);  
  48.   if(var.parray != NULL)  
  49.   {  
  50.     void * pArrayData = NULL;  
  51.   
  52.     //Get a safe pointer to the array  
  53.     SafeArrayAccessData(var.parray,&pArrayData);  
  54.   
  55.     //Copy bitmap to it  
  56.     memcpy(pArrayData, pBuf, cBufLen);  
  57.   
  58.     //Unlock the variant data  
  59.     SafeArrayUnaccessData(var.parray);  
  60.   
  61.     *ovData = var;  // Create a COleVariant based on our variant  
  62.     VariantClear(&var);  
  63.   
  64.     fRetVal = TRUE;  
  65.   }  
  66.   return fRetVal;  
  67. }  
转自:http://blog.csdn.net/zgl7903/article/details/2536463
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161085.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月18日 下午6:46
下一篇 2022年7月18日 下午6:46


相关推荐

  • CSDN的博客积分计算规则

    CSDN的博客积分计算规则最近对 CSDN 的博客积分计算规则比较疑惑 并看到 CSDN 的一篇博客 csdn 的博客积分如何计算 博客排行榜排名分值 个人 Blog 所有随笔与文章的阅读数之和 个人 Blog 所有评论数之和 10 个人所发表的评论数之和 50 CSDN 和博客园的积分计算规则是不一样的 下面是是我整理的一些规则 CSDN 博客积分计算规则 1 每发布一篇原创或

    2026年3月17日
    3
  • 联想推出OpenClaw部署服务:线上线下均可免费安装

    联想推出OpenClaw部署服务:线上线下均可免费安装

    2026年3月16日
    2
  • 编写测试用例及一个例子

    编写测试用例及一个例子一.概念1.什么是测试用例?在测试过程中很重要的一类文档,它是测试工作的核心、是一组在测试时输入输出的标准、是软件需求的具体对照。2.测试用例的作用:检验软件是否满足客户需求、体现一个测试人员的工作量、展现测试用例的设计思路3.测试用例所包含的内容:用例编号、用例名称、测试背景、前置条件、优先级、重要级、测试数据、测试步骤、预期结果、实际结果、备注。4.测试用例的编写流…

    2022年7月17日
    12
  • 浅谈单工,半双工和全双工有何区别和联系?[通俗易懂]

    浅谈单工,半双工和全双工有何区别和联系?

    2022年2月13日
    61
  • 腾讯多业务全面接入DeepSeek R1-0528

    腾讯多业务全面接入DeepSeek R1-0528

    2026年3月12日
    2
  • RPC协议了解

    RPC协议了解1.RPC概述RPC(RemoteProcedureCallProtocol)远程过程调用协议。通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个过程或函数,就像调用本地应用程序中的一样。正确的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。2.RPC特点:2.1)RPC是协议:协议意味着规范。目前典型的RPC实现包括Dubbo、Thrift、Herrty等。但这些实现往往都会附加其他重要功能,例如Dubbo还包括服务管理、访问权限

    2022年5月19日
    65

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号