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);
}
}
求高手解答