如何访问SAFEARRAY中的数据?

fancy_zhh 2003-08-30 04:43:31
void (SAFEARRAY ** safearray)
{
//如何在这里读写safearray中的数据
//????????????????????????????
}

int main {
unsigned int cn = 10;
SAFEARRAY * p = SafeArrayCreateVector(VT_UI4,0,&cn);
void * pData;
SafeArrayAccessData(p,&pData);
strcpy(pData,"0123456789");

//调用上面的这个函数,在函数内部读取
f(&p); //???????????????????????????????????

SafeArrayUnaccessData(p);
SafeArrayDestroy(p);
}

...全文
72 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fancy_zhh 2003-09-04
  • 打赏
  • 举报
回复
这样可行,但我在ActiveX传递时却根据不对
lxpbuaa 2003-09-03
  • 打赏
  • 举报
回复
void f(SAFEARRAY **safearray)
{
PChar S = (PChar)safearray[0]->pvData;
ShowMessage(S);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned long cn = 10;
SAFEARRAY * p = SafeArrayCreateVector(VT_UI4, 0, cn);
void *pData;
SafeArrayAccessData(p, &pData);
Move("0123456789", pData, 10);

//调用上面的这个函数,在函数内部读取
f(&p); //???????????????????????????????????

SafeArrayUnaccessData(p);
SafeArrayDestroy(p);
}

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
fancy_zhh 2003-09-01
  • 打赏
  • 举报
回复
Up
说明文字在博客。 摘录: 在学习的时候曾经百度了一下,想查找关于delphiSafeArray的用法,没想到资料竟然如此之少,甚至连一篇相对完整的都没有。也许正如田师傅所说,现在高手们都在实行“技术封锁”了? 在CSDN技术心有一篇关于C++的使用,说的比较详细。鉴于手有田师傅写的代码,特拿来一部分对照自己学习的,翻译为Delphi版本。留作笔记,日后翻阅。 =============================================================================== SAFEARRAY的主要目的是用于automation的数组型参数的传递。因为在网络环境,数组是不能直接传递的,而必须将其包装成SafeArray。实质上SafeArray就是将通常的数组增加一个描述符,说明其维数、长度、边界、元 素类型等信息。SafeArray也并不单独使用,而是将其再包装到VARIANT类型的变量,然后才作为参数传送出去。在VARIANT的vt成员的 值如果包含VT_ARRAY|...,那么它所封装的就是一个SafeArray,它的parray成员即是指向SafeArray的指针。 SafeArray元素的类型可以是VARIANT能封装的任何类型,包括VARIANT类型本身。 Delphicom组件或外部调用需要传递一个对象或者数组,这个时候可以考虑使用SafeArray。比如三层架构通常需要将使用的ClientDataSet数据集传出,那么就可以将DataSet转换为SafeArray,再由其他模块转换接收。 ===============================================================================

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧