找回密码
 注册
Simdroid-非首页
查看: 87|回复: 0

[代码挑战区] 调用DLL问题

[复制链接]
发表于 2009-7-10 17:12:04 | 显示全部楼层 |阅读模式 来自 安徽芜湖
调用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[3*DATA_NUM];     //所有数据

  BYTE m_Rdata[DATA_NUM];       //红信号数据      

  BYTE m_Gdata[DATA_NUM];       //绿信号数据

  BYTE m_Bdata[DATA_NUM];       //蓝信号数据

  BYTE m_Wdata[DATA_NUM];       //外接相机信号数据



③ 在“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



}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-6-21 08:53 , Processed in 0.032034 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表