peifang 发表于 2009-7-10 17:12:04

调用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]
查看完整版本: 调用DLL问题