找回密码
 立即注册

QQ登录

只需一步,快速开始

w632541910

注册会员

1

主题

7

帖子

49

积分

注册会员

积分
49

活字格认证

最新发帖
w632541910
注册会员   /  发表于:2015-8-29 11:40  /   查看:8557  /  回复:10
在VS2013、MFC平台下,使用chart控件中的chart2DData对象的CopyXVectorIn、CopyYVectorIn等方法报错
“Object type mismatch”。源代码如下
VARIANT varChunk;
        SAFEARRAY *psa; //使用数组整理读取的数据
        SAFEARRAYBOUND rgsabound[1];
        rgsabound[0].cElements = 5; //设置数组的大小
        rgsabound[0].lLbound = 0;
        psa = SafeArrayCreate(VT_R8, 1, rgsabound); //创建SafeArray数组
        double *pData = new double[5];

        for (long i = 0; i < 5;++i)
        {
                pData = i * 2;
                ::SafeArrayPutElement(psa, &i, pData + i);

        }
        varChunk.vt = VT_R8 | VT_ARRAY; //数组类型
        varChunk.parray = psa;
        m_GroupCollection = m_Chart.GetChartGroups();
        m_ChartGroup = m_GroupCollection.get_Item(_variant_t(1L));
        m_Data = m_ChartGroup.GetData();
        m_Data.CopyYArrayIn(varChunk);
请教以上问题如何解决?

10 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-8-31 17:22:00
沙发
回复 1楼w632541910的帖子

很抱歉给你带来的使用上的不便。
你的问题我们收到了,为了帮助你解决问题,请问你使用的C1Chart Com的版本是什么?
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
w632541910
注册会员   /  发表于:2015-9-7 10:58:00
板凳
版本是C1Chart2D 8.0
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-9-7 14:08:00
地板
回复 3楼w632541910的帖子

谢谢反馈。
根据猜测,建议首先重新为数组分配存储空间,然后检查结果。
由于问题不是出在一个简单的应用中,如果依然有问题,请将检查的结果反馈给我们,并且提供一个我们可以用来调查研究的Demo。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
w632541910
注册会员   /  发表于:2015-9-15 16:13:00
5#
请问你们那里有没有在VC++中使用CopyYArrayIn()函数的实例啊,有的话发一份给我,谢谢!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-9-15 17:46:00
6#
回复 5楼w632541910的帖子

很抱歉,没有现成的示例。
有一些基本的思路可以给你提供。
1.变量varChunk 应该传入到CopyYArrayIn()。参考:
  1. m_Data.CopyYArrayIn(&varChunk);
复制代码

这个可以参考微软的msdn:https://support.microsoft.com/en-us/kb/167668

2.如果使用的是C++而不是VB,由于COM接口是由VB设计的,需要如下。
从VFC wrapper 类复制声明,如下:
  1. BOOL CopyXVectorIn(long Series, const VARIANT& vArray);

  2.      BOOL CopyYVectorIn(long Series, const VARIANT& vArray);

  3.      BOOL CopyYArrayIn(const VARIANT& vArray);

  4.      BOOL CopyXVectorOut(long Series, const VARIANT& vArray);

  5.      BOOL CopyYVectorOut(long Series, const VARIANT& vArray);

  6.      BOOL CopyYArrayOut(const VARIANT& vArray);
复制代码


3.CopyYArrayIn()是期望2维数组,而不是一维数组。请按照如下修改:
  1. m_Data.CopyYVectorIn(0, &varChunk);
复制代码


有关这个方法的使用,可以参考文档:
http://helpcentral.componentone. ... arrayinmethodch.htm
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
w632541910
注册会员   /  发表于:2015-9-15 19:39:00
7#
好的,我试一下
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-9-16 09:01:00
8#
回复 7楼w632541910的帖子

谢谢反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-9-25 17:53:00
9#
回复 7楼w632541910的帖子

问题解决如何了?
为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢     
   

评分

参与人数 1满意度 +5 收起 理由
w632541910 + 5

查看全部评分

请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
w632541910
注册会员   /  发表于:2015-9-28 16:55:00
10#
直接传递二维数组还是不行,换了另外一种策略进行批量更新了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部