• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 如何将safeArray复制到int数组

如何将safeArray复制到int数组

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 如何将safeArray复制到int数组等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 如何将safeArray复制到int数组
描述:

有一个safeArray的二维数组,我想copy到一个int的二维数组
我现在用的是
for()
{
   for()
  {
       用GetElement()赋值
  }
}
有没有办法一次性copy到int数组?
谢谢了!


解决方案1:

short pMyOriginalData[2][3][4][5];
HRESULT hr;
//initialize data
for(short a = 0; a < 2; a++)
for(short b = 0; b < 3; b++)
for(short c = 0; c < 4; c++)
for(short d = 0; d < 5; d++)
pMyOriginalData[a][b][c][d] = a*b*c*d;
SAFEARRAY* pMyArray;
SAFEARRAYBOUND rgsabound[4];
for(int count = 2; count < 6; count++)
{
rgsabound[count - 2].lLbound = 0;
rgsabound[count - 2].cElements = count;
}
pMyArray = SafeArrayCreate(VT_I2, 4, rgsabound);
short* pData;
hr = SafeArrayAccessData(pMyArray, (void**)&pData);
memcpy(pData, pMyOriginalData, 2*3*4*5*2);
short element;
long location[4] = {1,2,3,4};
hr = SafeArrayGetElement(pMyArray, location, (void*)&element);
ASSERT(element == 1*2*3*4);
hr = SafeArrayDestroy(pMyArray);
ASSERT(hr != S_OK);
hr = SafeArrayUnaccessData(pMyArray);
hr = SafeArrayDestroy(pMyArray);
ASSERT(hr == S_OK);
这是个4维的,一个意思,自己改改就可以了!

解决方案2:

void CopySafeArray(SAFEARRAY* pSa)
{
UINT Dim = ::SafeArrayGetDim(pSa);
// ASSERT(Dim == 2);
UINT ElementSize = ::SafeArrayGetElemsize(pSa);
// ASSERT(ElementSize == sizeof(int));
LONG LBound1, UBound1;
::SafeArrayGetLBound(pSa, 1, &LBound1);
::SafeArrayGetUBound(pSa, 1, &UBound1);
LONG LBound2, UBound2;
::SafeArrayGetLBound(pSa, 2, &LBound2);
::SafeArrayGetUBound(pSa, 2, &UBound2);
UINT m = UBound1 - LBound1 + 1;
UINT n = UBound2 - LBound2 + 1;
int* Array = new int[m*n];
LONG* pvData = NULL;
::SafeArrayAccessData(pSa, (void**)&pvData);
memcpy(Array, pvData, sizeof(LONG) * (m*n));
::SafeArrayUnaccessData(pSa);
//Array中就是数据
delete[] Array;
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-06-04 如果com组件不支持自动化的话,哪些类型是可以使用的!
  • 2017-06-05 求助:关于ShowBrowserBar的问题
  • 2017-06-04 用midl对idl文件操作,生成的四个文件能否直接编译成dll?
  • 2017-06-04 如何制作dll文档
  • 2017-06-04 activeX??
  • 2017-06-04 在线等待,DCOM服务端如何得到调用端的机器名或IP地址
  • 2017-06-05 在DLL中使用AfxGetMainWnd的问题
  • 2017-06-05 从线程如何从主线程的窗口类中获得其成员变量?
  • 2017-06-04 大家讨论一下!
  • 2017-06-04 最高分求解VisualStudio2008的ActiveX开发问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • VS2010建立了MFCAxtiveX工程报错,JS调用Axtivex不成功
    • 求助:一个奇怪的编译问题?
    • 怎样调用一个exe程序并使该程序始终运行在本程序的上方
    • 多线程同步:刚开始接触线程,无从下手,如何编程实现急求!!!!!!!!!!
    • 微软SAPI的问题,很急,大家帮忙看一眼吧!
    • vc++如何调用com+的服务?
    • svchost调用的dll中是否能实现消息钩子
    • 不安装realplayer,在我的程序内怎么播放rm文件?
    • dll的参数传递
    • excel作报表

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有