首先有一个控制类CPCI8622_SampleData,这个类是连接AD板卡的
//赋初值
CPCI8622_SampleData::CPCI8622_SampleData()
{
.....
m_hDevice = NULL;
.........
}
//获取句柄
bool CPCI8622_SampleData::OpenCard()
{
........
m_hDevice = PCI8622_CreateDevice(0);
.........
return true;
}
//采集AD信号
bool CPCI8622_SampleData::ReadData()
{
if(!PCI8622_ReadDeviceProAD_Npt(m_hDevice, gl_ADBuffer[gl_nReadIndex],iReadSizeWords, &gl_ReadSizeWords))
{
AfxMessageBox("Read Data Error.....");
return false;
}
.....
return true;
}//主类CWMeasureApp打开板卡
BOOL CWMeasureApp::InitInstance()
{
...............
//在头文件中定义了一个对象 CPCI8622_SampleData m_pPCI8622
if(!m_pPCI8622.OpenCard())
{
AfxMessageBox("AD采集卡PCI8622打开失败,请关闭计算机检查采集卡");
return FALSE;
}
//通过监控获取的句柄为m_hDevice = 0x000005d
..........
return true;}又有一个类CDlgInOutSignal要调用AD板卡的采集函数,好实时显示采集电压值void CDlgInOutSignal::OnTimer(UINT nIDEvent)
{
..............
//我的方法是重新建一个对象
CPCI8622_SampleData m_PCI8622
m_PCI8622.ReadData();...................}问题出现了,系统报错"Read Data Error....." 经过监控 主类调用打开板卡函数后返回的句柄m_hDevice = 0x000005d是正确的,可是监控过程中发现当类CDlgInOutSignal建一个对象时 CPCI8622_SampleData类又一次运行CPCI8622_SampleData::CPCI8622_SampleData() 将句柄初始化所以调用,再调用PCI8622_ReadDeviceProAD_Npt(m_hDevice, gl_ADBuffer[gl_nReadIndex],iReadSizeWords, &gl_ReadSizeWords))时句柄错误,请问高手们这个问题如何解决?
//赋初值
CPCI8622_SampleData::CPCI8622_SampleData()
{
.....
m_hDevice = NULL;
.........
}
//获取句柄
bool CPCI8622_SampleData::OpenCard()
{
........
m_hDevice = PCI8622_CreateDevice(0);
.........
return true;
}
//采集AD信号
bool CPCI8622_SampleData::ReadData()
{
if(!PCI8622_ReadDeviceProAD_Npt(m_hDevice, gl_ADBuffer[gl_nReadIndex],iReadSizeWords, &gl_ReadSizeWords))
{
AfxMessageBox("Read Data Error.....");
return false;
}
.....
return true;
}//主类CWMeasureApp打开板卡
BOOL CWMeasureApp::InitInstance()
{
...............
//在头文件中定义了一个对象 CPCI8622_SampleData m_pPCI8622
if(!m_pPCI8622.OpenCard())
{
AfxMessageBox("AD采集卡PCI8622打开失败,请关闭计算机检查采集卡");
return FALSE;
}
//通过监控获取的句柄为m_hDevice = 0x000005d
..........
return true;}又有一个类CDlgInOutSignal要调用AD板卡的采集函数,好实时显示采集电压值void CDlgInOutSignal::OnTimer(UINT nIDEvent)
{
..............
//我的方法是重新建一个对象
CPCI8622_SampleData m_PCI8622
m_PCI8622.ReadData();...................}问题出现了,系统报错"Read Data Error....." 经过监控 主类调用打开板卡函数后返回的句柄m_hDevice = 0x000005d是正确的,可是监控过程中发现当类CDlgInOutSignal建一个对象时 CPCI8622_SampleData类又一次运行CPCI8622_SampleData::CPCI8622_SampleData() 将句柄初始化所以调用,再调用PCI8622_ReadDeviceProAD_Npt(m_hDevice, gl_ADBuffer[gl_nReadIndex],iReadSizeWords, &gl_ReadSizeWords))时句柄错误,请问高手们这个问题如何解决?
m_PCI8622.ReadData();
不用重建一个,就用之前创建好的
class CWMeasureApp : public CWinApp
{
public:
CPCI8622_SampleData m_pPCI8622;
}
(CWMeasureApp*)AfxGetApp()->m_pPCI8622
CWMeasureApp* pApp = (CWMeasureApp*)AfxGetApp();
pApp->m_pPCI8622.ReadData();
经过测试,没有问题。