| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 592 人关注过本帖
标题:MFC调用COM库问题
只看楼主 加入收藏
xiaogang1a2b
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-9-20
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
MFC调用COM库问题
小弟写了一简单的MFC对话框程序来控制一运动控制器,其中调用了控制器的COM库函数,编译通过,但一按钮控件下的函数不执行,只有调试状态下单步他才能执行提调试过程中发现如下错误 :MultiRobotOpenGLParkerMFCV7.exe 中的 0x7535b9bc 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0042b504 处的 _com_error。
以下按钮代码:
oid D_PARKER_CONTROL::OnBnClickedBtWrite()
{
    // TODO: 在此添加控件通知处理程序代码
    UpdateData(TRUE);
        
   
    if(m_vType==0)
    {
        m_Cntl->SetGlobal(8, 0, (double)m_v0, true);
        m_Cntl->SetGlobal(8, 1, (double)m_v1, true);
        m_Cntl->SetGlobal(8, 2, (double)m_v2, true);
        m_Cntl->SetGlobal(8, 3, (double)m_v3, true);   // 设置p3的值
    }
    else
    {
        m_Cntl->SetFlag(1032, true, true);
        SegCopy(X1Array_Value,Y1Array_Value,Z1Array_Value,A1Array_Value,B1Array_Value,C1Array_Value,control_parker);   
        SegCopy(X2Array_Value,Y2Array_Value,Z2Array_Value,A2Array_Value,B2Array_Value,C2Array_Value,control_parker);


        CComVariant vaxis;   
        CComVariant *buf;
        vaxis = m_Stat->GetACRCustom("P6916");            //    读取系统时钟1
        ::SafeArrayAccessData(vaxis.parray,(void**)&buf);
        m_time1=buf[0].lVal;
        UpdateData(FALSE);
        ::SafeArrayUnaccessData(vaxis.parray);

        long m_nSize=0;
        X1Array_Addr=m_Stat->GetLocalArrayAddr(0,1,0,&m_nSize);
        Y1Array_Addr=m_Stat->GetLocalArrayAddr(0,1,3,&m_nSize);
        Z1Array_Addr=m_Stat->GetLocalArrayAddr(0,1,6,&m_nSize);
        A1Array_Addr=m_Stat->GetLocalArrayAddr(0,1,9,&m_nSize);
        B1Array_Addr=m_Stat->GetLocalArrayAddr(0,1,12,&m_nSize);
        C1Array_Addr=m_Stat->GetLocalArrayAddr(0,1,15,&m_nSize);

        X2Array_Addr=m_Stat->GetLocalArrayAddr(0,1,1,&m_nSize);
        Y2Array_Addr=m_Stat->GetLocalArrayAddr(0,1,4,&m_nSize);       // 获取各数组地址
        Z2Array_Addr=m_Stat->GetLocalArrayAddr(0,1,7,&m_nSize);
        A2Array_Addr=m_Stat->GetLocalArrayAddr(0,1,10,&m_nSize);
        B2Array_Addr=m_Stat->GetLocalArrayAddr(0,1,13,&m_nSize);
        C2Array_Addr=m_Stat->GetLocalArrayAddr(0,1,16,&m_nSize);

        X3Array_Addr=m_Stat->GetLocalArrayAddr(0,1,2,&m_nSize);
        Y3Array_Addr=m_Stat->GetLocalArrayAddr(0,1,5,&m_nSize);
        Z3Array_Addr=m_Stat->GetLocalArrayAddr(0,1,8,&m_nSize);
        A3Array_Addr=m_Stat->GetLocalArrayAddr(0,1,11,&m_nSize);
        B3Array_Addr=m_Stat->GetLocalArrayAddr(0,1,14,&m_nSize);
        C3Array_Addr=m_Stat->GetLocalArrayAddr(0,1,17,&m_nSize);

        DataInput( X1Array_Value, X1Array_Addr);
        DataInput( Y1Array_Value, Y1Array_Addr);
        DataInput( Z1Array_Value, Z1Array_Addr);    //初始化 写入第一段数据
        DataInput( A1Array_Value, A1Array_Addr);
        DataInput( B1Array_Value, B1Array_Addr);
        DataInput( C1Array_Value, C1Array_Addr);

        DataInput( X2Array_Value, X2Array_Addr);
        DataInput( Y2Array_Value, Y2Array_Addr);
        DataInput( Z2Array_Value, Z2Array_Addr);    //初始化 写入第二段数据
        DataInput( A2Array_Value, A2Array_Addr);
        DataInput( B2Array_Value, B2Array_Addr);
        DataInput( C2Array_Value, C2Array_Addr);



        vaxis = m_Stat->GetACRCustom("P6916");
        ::SafeArrayAccessData(vaxis.parray,(void**)&buf);
        m_time2=buf[0].lVal;
        UpdateData(FALSE);
        ::SafeArrayUnaccessData(vaxis.parray);

        m_time3=m_time2-m_time1;
        UpdateData(FALSE);
        //SetTimer(1,200,NULL);
    }
}

求高手解答

搜索更多相关主题的帖子: 对话框 Microsoft 控制器 
2012-09-21 11:12
眼底星空
Rank: 4
等 级:业余侠客
威 望:3
帖 子:85
专家分:289
注 册:2006-9-2
收藏
得分:20 
这个。。不熟悉你这个组件 根本没办法知道哪里调用有问题。自己调试下,多试试吧。
建议组件的东西最好加上try catch捕获异常。或许能看到返回的错误信息是什么。

无为而为 && 每天进步一小点...
2012-09-25 08:39
xiongzw2008
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-3-21
收藏
得分:0 
你用的parker控制器?我也遇到过软件异常,读p变量的时候
2013-03-21 17:12
快速回复:MFC调用COM库问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038321 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved