调用DLL问题
调用DLL问题我系有一个图像采集卡,是天津市耀辉光电技术有限公司的,现在想利用LabVIEW调用这个卡的DLL,但怎么都不成功。
这个卡的库文件非常简单,我贴在下面。我调用的时候是参考LabVIEW自带的例程Call DLL.vi进行参数的设置的。具体设置如下:调用函数 lcDeviceOpen()无参数,返回值是数值型的,调用lcDataAcquisition(HANDLE hDevice,BYTE *Data, BOOL bMode,int nChannel);时,4个参数,一个返回值,参数分别是数值型,付了初值0的数组(2700个元素),数值型、数值型,那么程序运行到这个函数时候返回值怎么都是2,不是0,所以调用不成功,我也查不出来原因,请高手指导。
附件里面是我编的测试程序和DLL库,是8.2版本的,请大家帮帮忙。 ————————————————————————————————————————————
1.1 库函数原型声明:
_declspec(dllimport) HANDLE lcDeviceOpen();
_declspec(dllimport) void lcDeviceClose(HANDLE hDevice);
_declspec(dllimport) long lcDataAcquisition(HANDLE hDevice,BYTE *Data,
BOOL bMode,int nChannel);
1.2 库函数说明:
HANDLE lcDeviceOpen()
功能: 打开CCD设备;
参数: 无。
返回值:
0 ——调用核心驱动失败;
其他——调用成功返回CCD数据采集设备句柄;
说明:
执行采集函数前必须调用此函数。
long lcDataAcquisition(HANDLE hDevice,BYTE *Data, BOOL bMode,int nChannel)
功能: CCD数据采集;
参数:
hDevice —— CCD数据采集设备句柄;
Data —— 存储CCD采集数据的指针变量;
bMode —— 采集模式设定
TRUE — 采集RGB三路数据
FALSE — 采集由nChannel指定的某路数据
nChannel —— 选择通道(1-4),仅当bMode= FALSE时有效
1— B通道(蓝色数据通道)
2— G通道(绿色数据通道)
3— R通道(红色数据通道)
4— W通道(外接相机数据通道)
返回值:
0 —— 调用成功;
说明:
调用此函数之前,须为iData指针变量开辟相应的存储空间。
void lcDeviceClose(HANDLE hDevice)
功能: 关闭CCD设备函数;
参数: hDevice —— CCD数据采集设备句柄;
返回值:无
说明:
在程序退出时,调用此函数关闭CCD设备。
——————————————————
4.1 CCD信号采集步骤
利用库函数进行CCD信号采集步骤如下:
① 首先在 “howusedemoView.h” (信号采集头文件) 中类的外部定义一个CCD像元数的宏变量来表示所采集的像元的个数
const UINT DATA_NUM = 2700; //预定义采集像元个数
② 然后在该文件“howusedemoView.h”中类内部定义存放像元灰度值的数组:
BYTE m_Tdata; //所有数据
BYTE m_Rdata; //红信号数据
BYTE m_Gdata; //绿信号数据
BYTE m_Bdata; //蓝信号数据
BYTE m_Wdata; //外接相机信号数据
③ 在“howusedemoView.cpp”(信号采集执行文件)的初始化函数中调用库函数打开CCD采集设备:
void CHowusedemoView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
m_hCcdDevice = lcDeviceOpen();//打开实验仪
if(m_hCcdDevice == NULL)
{
MessageBox("打开实验仪失败");
}
}
④ 运行触发CCD信号采集的消息函数进行信号的采集:
void CHowusedemoView::OnButton1()
{
DWORD returnCode;//返回代码
//采集彩色数据
if((returnCode = lcDataAcquisition(m_hCcdDevice,m_Tdata, TRUE, 0))!=0)
{
AfxMessageBox("请检查硬件设备是否连接正确!");
return;
}
//采集蓝色通道数据
if((returnCode = lcDataAcquisition(m_hCcdDevice,m_Bdata, FALSE, 1))!=0)
{
AfxMessageBox("请检查硬件设备是否连接正确!");
return;
}
//采集绿色通道数据
if((returnCode = lcDataAcquisition(m_hCcdDevice,m_Gdata, FALSE, 2))!=0)
{
AfxMessageBox("请检查硬件设备是否连接正确!");
return;
}
//采集红色通道数据
if((returnCode = lcDataAcquisition(m_hCcdDevice,m_Rdata, FALSE, 3))!=0)
{
AfxMessageBox("请检查硬件设备是否连接正确!");
return;
}
//采集外接相机数据
if((returnCode = lcDataAcquisition(m_hCcdDevice,m_Wdata, FALSE, 4))!=0)
{
AfxMessageBox("请检查硬件设备是否连接正确!");
return;
}
}
⑤ 调用绘图函数把采集到的R、G、B进行信号画出曲线进行显示
void CHowusedemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
}
页:
[1]