ADO的GetChunk后VARIANT转换问题

xuxingok 2007-07-12 11:15:43
数据库是ACCESS的ADO连接
在表中有个OLE对象的字段,字段名ParamInfo

unsigned char cParamInfo[PARAMSIZE];
memset(cParamInfo, 0x00, PARAMSIZE * sizeof(unsigned char));

// 对数据库进行写
VARIANT varBLOB;
::VariantInit(&varBLOB);
SAFEARRAY *psa = NULL;
SAFEARRAYBOUND rgsabound[1];
m_pRecordset->AddNew();
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = PARAMSIZE;
psa = ::SafeArrayCreate(VT_UI1, 1, rgsabound);
// 到这在这里cParamInfo就是直接写进PARAMSIZE个0的
for (long index = 0; index < PARAMSIZE; ++index)
::SafeArrayPutElement(psa, &i, cParamInfo + index);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("ParamInfo")->AppendChunk(varBLOB);
m_pRecordset->Update();

// 对数据库进行读
VARIANT varBLOB;
::VariantInit(&varBLOB);
long lDataSize = 0l;

lDataSize = m_AdoConn.m_pRecordset->GetFields()->GetItem("ParamInfo")->ActualSize;
if (PARAMSIZE == lDataSize)
{
varBLOB = m_AdoConn.m_pRecordset->GetFields()->GetItem("ParamInfo")->GetChunk(PARAMSIZE);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
// for(long index=0; index < PARAMSIZE; ++index)
// {
// ::SafeArrayGetElement(varBLOB.parray, &index, cParamInfo + index);
// }

unsigned char *pBuf = NULL;
HRESULT hr = ::SafeArrayAccessData(varBLOB.parray, (void **)&pBuf);
if (FAILED(hr))
{
return;//-----------------------------------(1)
}
::SafeArrayUnaccessData(varBLOB.parray);
memcpy(cParamInfo, pBuf, PARAMSIZE);
}
}

--------------------------------------------------------------------
写是成功了,没有异常;
可以在读时到(1)处就返回了,为什么会这样呢?难道GetChunk时有问题??
SafeArrayAccessData怎么会失败呢?我以前用过的都好用的啊~~~
3x
...全文
237 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuxingok 2007-07-16
  • 打赏
  • 举报
回复
问题解决,给分~
CathySun118 2007-07-15
  • 打赏
  • 举报
回复
太长了,你参考下:http://www.binzi.net/html/vc/2006/0818/5946.html
xuxingok 2007-07-13
  • 打赏
  • 举报
回复
没人遇到过吗
lyg_zy 2007-07-12
  • 打赏
  • 举报
回复
用COleSafeArray试试,用法自己看MSDN
xuxingok 2007-07-12
  • 打赏
  • 举报
回复
up
xuxingok 2007-07-12
  • 打赏
  • 举报
回复
现在是GetChunk后varBLOB.parray的cElements与lLbound获取的值就是不对的,不知道是GetChunk的问题还是AppendChunk的问题~~~
内容概要:本文围绕“基于共享储能服务的智能楼宇双层优化配置”展开研究,提出了一种结合上层共享储能配置优化与下层楼宇内部能源调度优化的双层协同模型,通过Matlab代码实现,旨在提升智能楼宇在复杂能源环境下的运行效率与经济性。研究充分考虑光伏出力、负荷需求等不确定性因素,引入多维核密度估计、场景生成与削减等技术进行不确定性建模,并融合需求响应、微电网调度等先进理念,实现了对综合能源系统中储能资源的高效配置与动态调控,具有较强的理论深度与工程应用价值。; 适合人群:具备电力系统、可再生能源、优化算法或综合能源系统等相关背景,从事科研、工程应用或课题研究的研发人员、研究生及高年级本科生。; 使用场景及目标:①应用于智能楼宇、园区微电网、虚拟电厂等场景中的储能规划与运行优化;②支撑高水平学术论文(如EI/SCI)的复现、课题申报、毕业设计及实际项目的双层优化建模与求解实践。; 阅读建议:建议结合提供的Matlab代码进行实操演练,重点理解双层优化架构的设计逻辑、求解策略(如Benders分解、主从博弈等)及不确定性处理方法,同时可参考文中关联技术(如场景生成、需求响应)拓展研究思路与应用场景。

4,017

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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