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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 阿里图床api_阿里远程图床

    阿里图床api_阿里远程图床介绍:一款非常美观且极简响应式的阿里图床PHP源码服务器要求支持php修复了浏览器复制出错的bug网盘下载地址:http://kekewl.cc/3NvM8RdOWui0图片:

  • 点击超链接不跳转的方式[通俗易懂]

    点击超链接不跳转的方式

  • Oracle获取字符串的最后几位

    Oracle获取字符串的最后几位substr(字符串,-10)Oracle字符串函数substr(字符串,截取开始位置,截取长度)1.如果最后一个截取长度参数为空,则表示从截取开始位置起截到最末2.如果截取开始位置为大于0的数字,则表示从字符串左数几位开始3.如果截取开始位置为小于0的数字,则表示从字符串右数几位开始……

    2022年10月27日
  • 基础:MVC三层架构

    基础:MVC三层架构MVC三层架构基于狂神说讲的MVC三层架构图,概述:mvc框架由model,view,controller组成,执行流程一般是:在controller访问model获取数据,通过view渲染页面。mvc模式是web开发中的基础模式,采用的是分层设计,各层之间职责分明。然而事与愿违,当我们日积月累的基于mvc模式开发之后,会逐渐的感受到层与层之间存在粘连和职责模棱两可的地方,这就是service层出现的重要原因。Dao:Dao层、设计模式(DataAccessObject),称为数据访问对象。它是

  • pycharm django环境搭建_创建web项目

    pycharm django环境搭建_创建web项目1、Python环境搭建博主版本选择:Python2.7.15、Django1.11.82、pycharm安装pycharm激活成功教程版下载地址: 3、pycharm创建Django项目在软件安装和环境配置完成后,打开Pycharm.Step1.点击 File–>NewProject 弹出如下窗口Step…

  • UML概述及UML图详解[通俗易懂]

    UML概述及UML图详解[通俗易懂]​UML概述一、UML简介(一)UML(UnifiedModelingLanguage)为面向对象软件设计提供统一的、标准的、可视化的建模语言。适用于描述以用例为驱动,以体系结构为中心的软件设计的全过程。(二)UML的定义包括UML语义和UML表示法两个部分。 1.UML语义:UML对语义的描述使开发者能在语义上取得一致认识,消除了因人而异的表达方法所造成的影响; 2.UML表…

    2022年10月22日

发表回复

您的电子邮箱地址不会被公开。

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