添加sane和twain标准调用测试工程
This commit is contained in:
parent
ac0923f386
commit
f75c49dff4
|
@ -1,7 +1,6 @@
|
|||
#include "device_user.h"
|
||||
#include <QMessageBox>
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
#if 0
|
||||
|
||||
DeviceUserMgr::DeviceUserMgr(QWidget *wnd)
|
||||
{
|
||||
|
@ -37,6 +36,13 @@ DeviceUser::~DeviceUser()
|
|||
m_twainDS = nullptr;
|
||||
}
|
||||
|
||||
QString DeviceUser::GetName()
|
||||
{
|
||||
HGChar devName[256];
|
||||
HGTwain_GetDSName(m_twainDS, devName, 256);
|
||||
return QString(devName);
|
||||
}
|
||||
|
||||
HGResult DeviceUser::ShowSettingDlg()
|
||||
{
|
||||
return HGTwain_EnableDSUIOnly(m_twainDS, (HWND)m_wnd->winId(), DSCloseReqFunc, this);
|
||||
|
@ -56,12 +62,7 @@ void HGAPI DeviceUser::DSCloseReqFunc(HGTwainDS ds, HGPointer param)
|
|||
void HGAPI DeviceUser::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param)
|
||||
{
|
||||
DeviceUser* p = (DeviceUser*)param;
|
||||
HGImage image2 = nullptr;
|
||||
HGBase_CloneImage(image, 0, 0, &image2);
|
||||
if (nullptr != image2)
|
||||
{
|
||||
emit p->newImage(image2);
|
||||
}
|
||||
emit p->newImage(image);
|
||||
}
|
||||
|
||||
#else
|
||||
|
@ -81,11 +82,15 @@ DeviceUserMgr::~DeviceUserMgr()
|
|||
|
||||
class DeviceUser* DeviceUserMgr::OpenDeviceUser()
|
||||
{
|
||||
Dialog_Device_Select dlg(m_saneMgr, m_wnd);
|
||||
if (!dlg.exec())
|
||||
HGSaneDevice dev = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
HGSane_OpenSelectedDevice(m_saneMgr, (HWND)m_wnd->winId(), &dev);
|
||||
#else
|
||||
HGSane_OpenSelectedDevice(m_saneMgr, m_wnd, &dev);
|
||||
#endif
|
||||
if (nullptr == dev)
|
||||
return nullptr;
|
||||
|
||||
return new DeviceUser(m_wnd, dlg.getSaneDevice());
|
||||
return new DeviceUser(m_wnd, dev);
|
||||
}
|
||||
|
||||
DeviceUser::DeviceUser(QWidget *wnd, HGSaneDevice dev)
|
||||
|
@ -100,6 +105,13 @@ DeviceUser::~DeviceUser()
|
|||
m_saneDev = nullptr;
|
||||
}
|
||||
|
||||
QString DeviceUser::GetName()
|
||||
{
|
||||
HGChar devName[256];
|
||||
HGSane_GetDeviceName(m_saneDev, devName, 256);
|
||||
return QString(devName);
|
||||
}
|
||||
|
||||
HGResult DeviceUser::ShowSettingDlg()
|
||||
{
|
||||
#ifdef HG_CMP_MSC
|
||||
|
@ -111,16 +123,17 @@ HGResult DeviceUser::ShowSettingDlg()
|
|||
|
||||
HGResult DeviceUser::StartScan()
|
||||
{
|
||||
Dialog_Device_Scan dlg(m_saneDev, m_wnd);
|
||||
connect(&dlg, SIGNAL(newImage(void *)), this, SLOT(on_newImage(void *)), Qt::QueuedConnection);
|
||||
dlg.exec();
|
||||
disconnect(&dlg, SIGNAL(newImage(void *)), this, SLOT(on_newImage(void *)));
|
||||
return HGBASE_ERR_OK;
|
||||
#ifdef HG_CMP_MSC
|
||||
return HGSane_StartDeviceWithUI(m_saneDev, (HWND)m_wnd->winId(), DeviceImageFunc, this);
|
||||
#else
|
||||
return HGSane_StartDeviceWithUI(m_saneDev, m_wnd, DeviceImageFunc, this);
|
||||
#endif
|
||||
}
|
||||
|
||||
void DeviceUser::on_newImage(void *image)
|
||||
void HGAPI DeviceUser::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param)
|
||||
{
|
||||
emit newImage(image);
|
||||
DeviceUser* p = (DeviceUser*)param;
|
||||
emit p->newImage(image);
|
||||
}
|
||||
|
||||
#endif
|
|
@ -4,7 +4,7 @@
|
|||
#include "base/HGDef.h"
|
||||
#include <QDialog>
|
||||
|
||||
#ifdef HG_CMP_MSC
|
||||
#if 0
|
||||
#include "twain_user/HGTwain.h"
|
||||
|
||||
class DeviceUserMgr : public QObject
|
||||
|
@ -32,6 +32,8 @@ class DeviceUser : public QObject
|
|||
public:
|
||||
~DeviceUser();
|
||||
|
||||
// 获取设备名字
|
||||
QString GetName();
|
||||
// 弹出配置对话框
|
||||
HGResult ShowSettingDlg();
|
||||
// 弹出扫描对话框
|
||||
|
@ -77,17 +79,19 @@ class DeviceUser : public QObject
|
|||
public:
|
||||
~DeviceUser();
|
||||
|
||||
// 获取设备名字
|
||||
QString GetName();
|
||||
// 弹出配置对话框
|
||||
HGResult ShowSettingDlg();
|
||||
// 弹出扫描对话框
|
||||
HGResult StartScan();
|
||||
|
||||
private:
|
||||
static void HGAPI DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param);
|
||||
|
||||
signals:
|
||||
void newImage(void *image);
|
||||
|
||||
private slots:
|
||||
void on_newImage(void *image);
|
||||
|
||||
private:
|
||||
QWidget *m_wnd;
|
||||
HGSaneDevice m_saneDev;
|
|
@ -0,0 +1,11 @@
|
|||
#include "mainwindow.h"
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
MainWindow w;
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include "imgfmt/HGImgFmt.h"
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, ui(new Ui::MainWindow)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
m_devUserMgr = new DeviceUserMgr(this);
|
||||
m_devUser = nullptr;
|
||||
ui->label_currDevName->setText(QString::fromLocal8Bit("no dev"));
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
if (nullptr != m_devUser)
|
||||
{
|
||||
disconnect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)));
|
||||
delete m_devUser;
|
||||
m_devUser = nullptr;
|
||||
ui->label_currDevName->setText(QString::fromLocal8Bit("no dev"));
|
||||
}
|
||||
|
||||
delete m_devUserMgr;
|
||||
m_devUserMgr = nullptr;
|
||||
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void MainWindow::on_newImage(void *image)
|
||||
{
|
||||
static int i = 0;
|
||||
char fileName[256];
|
||||
sprintf(fileName, "D:\\test_%d.jpg", i++);
|
||||
HGImgFmt_SaveImage((HGImage)image, 0, NULL, fileName);
|
||||
}
|
||||
|
||||
void MainWindow::on_pushButton_selectDev_clicked()
|
||||
{
|
||||
if (nullptr != m_devUser)
|
||||
{
|
||||
disconnect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)));
|
||||
delete m_devUser;
|
||||
m_devUser = nullptr;
|
||||
ui->label_currDevName->setText(QString::fromLocal8Bit("no dev"));
|
||||
}
|
||||
|
||||
DeviceUser *devUser = m_devUserMgr->OpenDeviceUser();
|
||||
if (devUser != nullptr)
|
||||
{
|
||||
m_devUser = devUser;
|
||||
connect(m_devUser, SIGNAL(newImage(void*)), this, SLOT(on_newImage(void*)));
|
||||
ui->label_currDevName->setText(m_devUser->GetName());
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::on_pushButton_setting_clicked()
|
||||
{
|
||||
if (nullptr != m_devUser)
|
||||
m_devUser->ShowSettingDlg();
|
||||
}
|
||||
|
||||
void MainWindow::on_pushButton_scan_clicked()
|
||||
{
|
||||
if (nullptr != m_devUser)
|
||||
m_devUser->StartScan();
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
#ifndef MAINWINDOW_H
|
||||
#define MAINWINDOW_H
|
||||
|
||||
#include <QMainWindow>
|
||||
#include "device_user.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
namespace Ui { class MainWindow; }
|
||||
QT_END_NAMESPACE
|
||||
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
private slots:
|
||||
void on_newImage(void *image);
|
||||
|
||||
void on_pushButton_selectDev_clicked();
|
||||
|
||||
void on_pushButton_setting_clicked();
|
||||
|
||||
void on_pushButton_scan_clicked();
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
DeviceUserMgr *m_devUserMgr;
|
||||
DeviceUser *m_devUser;
|
||||
};
|
||||
#endif // MAINWINDOW_H
|
|
@ -0,0 +1,97 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>60</x>
|
||||
<y>40</y>
|
||||
<width>91</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>当前设备名:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="label_currDevName">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>170</x>
|
||||
<y>50</y>
|
||||
<width>281</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushButton_selectDev">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>60</x>
|
||||
<y>170</y>
|
||||
<width>131</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>选择设备</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushButton_setting">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>240</x>
|
||||
<y>170</y>
|
||||
<width>131</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>设置参数</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushButton_scan">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>420</x>
|
||||
<y>170</y>
|
||||
<width>131</width>
|
||||
<height>51</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>开始扫描</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>800</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -0,0 +1,116 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
CONFIG += c++11
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any Qt feature that has been marked deprecated (the exact warnings
|
||||
# depend on your compiler). Please consult the documentation of the
|
||||
# deprecated API in order to know how to port your code away from it.
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
|
||||
# You can also make your code fail to compile if it uses deprecated APIs.
|
||||
# In order to do so, uncomment the following line.
|
||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
win32 {
|
||||
DEFINES += _CRT_SECURE_NO_WARNINGS
|
||||
LIBS += -ladvapi32
|
||||
|
||||
if (contains(DEFINES, OEM_HANWANG) || contains(DEFINES, OEM_LISICHENG) || contains(DEFINES, OEM_CANGTIAN) || contains(DEFINES, OEM_ZHONGJING) || contains(DEFINES, OEM_ZIGUANG)) {
|
||||
contains(DEFINES, OEM_HANWANG) {
|
||||
LIBS += -lHWBase -lHWImgFmt -lHWImgProc -lHWSaneUser -lHWTwainUser
|
||||
contains(QT_ARCH, i386) {
|
||||
LIBS += -L../../../../sdk/lib/win/x86/OEM/hanvon -llang
|
||||
}
|
||||
contains(QT_ARCH, x86_64){
|
||||
LIBS += -L../../../../sdk/lib/win/x64/OEM/hanvon -llang
|
||||
}
|
||||
}
|
||||
contains(DEFINES, OEM_LISICHENG) {
|
||||
LIBS += -lLSCBase -lLSCImgFmt -lLSCImgProc -lLSCSaneUser -lLSCTwainUser
|
||||
contains(QT_ARCH, i386) {
|
||||
LIBS += -L../../../../sdk/lib/win/x86/OEM/lanxum -llang
|
||||
}
|
||||
contains(QT_ARCH, x86_64){
|
||||
LIBS += -L../../../../sdk/lib/win/x64/OEM/lanxum -llang
|
||||
}
|
||||
}
|
||||
contains(DEFINES, OEM_CANGTIAN) {
|
||||
LIBS += -lCTSBase -lCTSImgFmt -lCTSImgProc -lCTSSaneUser -lCTSTwainUser
|
||||
contains(QT_ARCH, i386) {
|
||||
LIBS += -L../../../../sdk/lib/win/x86/OEM/cumtenn -llang
|
||||
}
|
||||
contains(QT_ARCH, x86_64){
|
||||
LIBS += -L../../../../sdk/lib/win/x64/OEM/cumtenn -llang
|
||||
}
|
||||
}
|
||||
contains(DEFINES, OEM_ZHONGJING) {
|
||||
LIBS += -lZJBase -lZJImgFmt -lZJImgProc -lZJSaneUser -lZJTwainUser
|
||||
contains(QT_ARCH, i386) {
|
||||
LIBS += -L../../../../sdk/lib/win/x86/OEM/microtek -llang
|
||||
}
|
||||
contains(QT_ARCH, x86_64){
|
||||
LIBS += -L../../../../sdk/lib/win/x64/OEM/microtek -llang
|
||||
}
|
||||
}
|
||||
contains(DEFINES, OEM_ZIGUANG) {
|
||||
LIBS += -lZGBase -lZGImgFmt -lZGImgProc -lZGSaneUser -lZGTwainUser
|
||||
contains(QT_ARCH, i386) {
|
||||
LIBS += -L../../../../sdk/lib/win/x86/OEM/unis -llang
|
||||
}
|
||||
contains(QT_ARCH, x86_64){
|
||||
LIBS += -L../../../../sdk/lib/win/x64/OEM/unis -llang
|
||||
}
|
||||
}
|
||||
} else {
|
||||
LIBS += -lHGBase -lHGImgFmt -lHGImgProc -lHGSaneUser -lHGTwainUser
|
||||
contains(QT_ARCH, i386) {
|
||||
LIBS += -L../../../../sdk/lib/win/x86/OEM/huagao -llang
|
||||
}
|
||||
contains(QT_ARCH, x86_64){
|
||||
LIBS += -L../../../../sdk/lib/win/x64/OEM/huagao -llang
|
||||
}
|
||||
}
|
||||
|
||||
contains(QT_ARCH, i386) {
|
||||
LIBS += -L../../../../sdk/lib/win/x86/Release
|
||||
CONFIG(release, debug|release) {
|
||||
DESTDIR = ../../../../release/win/x86/Release/
|
||||
}
|
||||
CONFIG(debug, debug|release) {
|
||||
}
|
||||
}
|
||||
contains(QT_ARCH, x86_64){
|
||||
LIBS += -L../../../../sdk/lib/win/x64/Release
|
||||
CONFIG(release, debug|release) {
|
||||
DESTDIR = ../../../../release/win/x64/Release/
|
||||
}
|
||||
CONFIG(debug, debug|release) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDEPATH += $$PWD/../../../app/demo/
|
||||
INCLUDEPATH += $$PWD/../../../utility/
|
||||
INCLUDEPATH += $$PWD/../../../modules/
|
||||
INCLUDEPATH += $$PWD/../../../../sdk/include/
|
||||
|
||||
SOURCES += \
|
||||
../../../app/demo/device_user.cpp \
|
||||
../../../app/demo/main.cpp \
|
||||
../../../app/demo/mainwindow.cpp
|
||||
|
||||
HEADERS += \
|
||||
../../../app/demo/device_user.h \
|
||||
../../../app/demo/mainwindow.h
|
||||
|
||||
FORMS += \
|
||||
../../../app/demo/mainwindow.ui
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
|
@ -0,0 +1,7 @@
|
|||
LIBRARY
|
||||
|
||||
EXPORTS
|
||||
|
||||
show_devlist_ui
|
||||
show_setting_ui
|
||||
show_scan_ui
|
|
@ -42,6 +42,7 @@ if (contains(DEFINES, OEM_HANWANG) || contains(DEFINES, OEM_LISICHENG) || contai
|
|||
}
|
||||
|
||||
win32 {
|
||||
DEF_FILE = HGSaneUI.def
|
||||
DEFINES += _CRT_SECURE_NO_WARNINGS
|
||||
LIBS += -ladvapi32
|
||||
|
||||
|
@ -120,6 +121,8 @@ win32 {
|
|||
}
|
||||
|
||||
unix {
|
||||
CONFIG += unversioned_libname unversioned_soname
|
||||
|
||||
LIBS += -llang
|
||||
QMAKE_LFLAGS += -static-libstdc++ -static-libgcc
|
||||
DISTRIBUTION = $$system(cat /etc/issue | cut -d\' \' -f1)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
TEMPLATE = subdirs
|
||||
|
||||
SUBDIRS += \
|
||||
HGSaneUI \
|
||||
HGDemo
|
|
@ -5,10 +5,11 @@ EXPORTS
|
|||
HGSane_CreateManager
|
||||
HGSane_DestroyManager
|
||||
HGSane_GetDeviceCount
|
||||
HGSane_GetDeviceName
|
||||
HGSane_GetDeviceNameWithIndex
|
||||
HGSane_OpenDevice
|
||||
HGSane_OpenSelectedDevice
|
||||
HGSane_CloseDevice
|
||||
HGSane_GetDeviceName
|
||||
HGSane_ShowDeviceSettingDlg
|
||||
HGSane_StartDevice
|
||||
HGSane_StopDevice
|
||||
|
|
|
@ -192,11 +192,10 @@ void CHGTestDlg::OnBnClickedButton1()
|
|||
return;
|
||||
}
|
||||
|
||||
HGChar errInfo[256];
|
||||
HGSane_OpenDevice(m_saneMgr, 0, &m_saneDev, errInfo, 256);
|
||||
HGSane_OpenSelectedDevice(m_saneMgr, m_hWnd, &m_saneDev);
|
||||
if (NULL != m_saneDev)
|
||||
{
|
||||
HGResult ret = HGSane_StartDevice(m_saneDev, DeviceEventFunc, this, DeviceImageFunc, this, errInfo, 256);
|
||||
HGResult ret = HGSane_StartDeviceWithUI(m_saneDev, m_hWnd, DeviceImageFunc, this);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
HGSane_CloseDevice(m_saneDev);
|
||||
|
@ -235,11 +234,6 @@ void CHGTestDlg::OnBnClickedButton2()
|
|||
}
|
||||
|
||||
#ifdef USE_SANE
|
||||
void HGAPI CHGTestDlg::DeviceEventFunc(HGSaneDevice dev, HGUInt error, const HGChar* errInfo, HGPointer param)
|
||||
{
|
||||
CHGTestDlg* p = (CHGTestDlg*)param;
|
||||
::PostMessage(p->m_hWnd, 2000, 0, 0);
|
||||
}
|
||||
void HGAPI CHGTestDlg::DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param)
|
||||
{
|
||||
CHGTestDlg* p = (CHGTestDlg*)param;
|
||||
|
@ -273,24 +267,3 @@ void HGAPI CHGTestDlg::DSImageFunc(HGTwainDS ds, HGImage image, HGPointer param)
|
|||
HGImgFmt_SaveImage(image, 0, NULL, strName);
|
||||
}
|
||||
#endif
|
||||
|
||||
LRESULT CHGTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
#ifdef USE_SANE
|
||||
if (2000 == message)
|
||||
{
|
||||
HGSane_CloseDevice(m_saneDev);
|
||||
m_saneDev = NULL;
|
||||
}
|
||||
else if (2001 == message)
|
||||
{
|
||||
HGImage image = (HGImage)wParam;
|
||||
CStringA strName;
|
||||
strName.Format("D:\\HGTest_%u.jpg", m_idx++);
|
||||
HGImgFmt_SaveImage(image, 0, NULL, strName);
|
||||
HGBase_DestroyImage(image);
|
||||
}
|
||||
#endif
|
||||
|
||||
return CDialogEx::WindowProc(message, wParam, lParam);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
//#define USE_SANE
|
||||
#define USE_SANE
|
||||
|
||||
// CHGTestDlg 对话框
|
||||
class CHGTestDlg : public CDialogEx
|
||||
|
@ -25,7 +25,6 @@ protected:
|
|||
#ifdef USE_SANE
|
||||
HGSaneManager m_saneMgr;
|
||||
HGSaneDevice m_saneDev;
|
||||
static void HGAPI DeviceEventFunc(HGSaneDevice dev, HGUInt error, const HGChar* errInfo, HGPointer param);
|
||||
static void HGAPI DeviceImageFunc(HGSaneDevice dev, HGImage image, HGPointer param);
|
||||
#else
|
||||
HGTwainDSM m_dsm;
|
||||
|
@ -48,5 +47,4 @@ protected:
|
|||
public:
|
||||
afx_msg void OnBnClickedButton1();
|
||||
afx_msg void OnBnClickedButton2();
|
||||
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||
};
|
||||
|
|
|
@ -5,11 +5,12 @@ EXPORTS
|
|||
HGTwain_CreateDSM
|
||||
HGTwain_DestroyDSM
|
||||
HGTwain_GetDSCount
|
||||
HGTwain_GetDSName
|
||||
HGTwain_GetDSNameWithIndex
|
||||
HGTwain_OpenDS
|
||||
HGTwain_OpenDefaultDS
|
||||
HGTwain_OpenSelectedDS
|
||||
HGTwain_CloseDS
|
||||
HGTwain_GetDSName
|
||||
HGTwain_EnableDSUIOnly
|
||||
HGTwain_EnableDS
|
||||
HGTwain_DisableDS
|
||||
|
|
|
@ -49,7 +49,7 @@ HGResult HGAPI HGSane_GetDeviceCount(HGSaneManager mgr, HGUInt* count)
|
|||
return saneManagerImpl->GetDeviceCount(count);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGSane_GetDeviceName(HGSaneManager mgr, HGUInt index, HGChar* name, HGUInt maxLen)
|
||||
HGResult HGAPI HGSane_GetDeviceNameWithIndex(HGSaneManager mgr, HGUInt index, HGChar* name, HGUInt maxLen)
|
||||
{
|
||||
if (NULL == mgr)
|
||||
{
|
||||
|
@ -109,6 +109,17 @@ HGResult HGAPI HGSane_CloseDevice(HGSaneDevice dev)
|
|||
return saneDeviceImpl->Close();
|
||||
}
|
||||
|
||||
HGResult HGAPI HGSane_GetDeviceName(HGSaneDevice dev, HGChar* name, HGUInt maxLen)
|
||||
{
|
||||
if (NULL == dev)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGSaneDeviceImpl* saneDeviceImpl = (HGSaneDeviceImpl*)dev;
|
||||
return saneDeviceImpl->GetName(name, maxLen);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGSane_ShowDeviceSettingDlg(HGSaneDevice dev, HGWindow parent)
|
||||
{
|
||||
if (NULL == dev)
|
||||
|
|
|
@ -20,7 +20,7 @@ HGEXPORT HGResult HGAPI HGSane_DestroyManager(HGSaneManager mgr);
|
|||
|
||||
HGEXPORT HGResult HGAPI HGSane_GetDeviceCount(HGSaneManager mgr, HGUInt *count);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGSane_GetDeviceName(HGSaneManager mgr, HGUInt index, HGChar *name, HGUInt maxLen);
|
||||
HGEXPORT HGResult HGAPI HGSane_GetDeviceNameWithIndex(HGSaneManager mgr, HGUInt index, HGChar *name, HGUInt maxLen);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGSane_OpenDevice(HGSaneManager mgr, HGUInt index, HGSaneDevice *dev, HGChar *errInfo, HGUInt errInfoLen);
|
||||
|
||||
|
@ -28,6 +28,8 @@ HGEXPORT HGResult HGAPI HGSane_OpenSelectedDevice(HGSaneManager mgr, HGWindow pa
|
|||
|
||||
HGEXPORT HGResult HGAPI HGSane_CloseDevice(HGSaneDevice dev);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGSane_GetDeviceName(HGSaneDevice dev, HGChar* name, HGUInt maxLen);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGSane_ShowDeviceSettingDlg(HGSaneDevice dev, HGWindow parent);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGSane_StartDevice(HGSaneDevice dev, HGSane_DeviceEventFunc eventFunc, HGPointer eventParam,
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "HGSaneImpl.hpp"
|
||||
#include "../base/HGInc.h"
|
||||
#include <string>
|
||||
|
||||
HGSaneManagerImpl::HGSaneManagerImpl()
|
||||
{
|
||||
|
@ -20,7 +19,7 @@ HGSaneManagerImpl::HGSaneManagerImpl()
|
|||
m_f_sane_control_option = NULL;
|
||||
memset(&m_saneApi, 0, sizeof(SANEAPI));
|
||||
|
||||
m_saneDlgDll = NULL;
|
||||
m_saneUIDll = NULL;
|
||||
m_f_show_devlist_ui = NULL;
|
||||
m_f_show_setting_ui = NULL;
|
||||
m_f_show_scan_ui = NULL;
|
||||
|
@ -49,18 +48,18 @@ HGResult HGSaneManagerImpl::Create(const HGChar* sanePath)
|
|||
return ret;
|
||||
}
|
||||
|
||||
HGBase_CreateDll("HGSaneUI.dll", &m_saneDlgDll);
|
||||
if (NULL != m_saneDlgDll)
|
||||
HGBase_CreateDll("HGSaneUI.dll", &m_saneUIDll);
|
||||
if (NULL != m_saneUIDll)
|
||||
{
|
||||
HGBase_GetDllProcAddress(m_saneDlgDll, "show_devlist_ui", (HGPointer*)&m_f_show_devlist_ui);
|
||||
HGBase_GetDllProcAddress(m_saneDlgDll, "show_setting_ui", (HGPointer*)&m_f_show_setting_ui);
|
||||
HGBase_GetDllProcAddress(m_saneDlgDll, "show_scan_ui", (HGPointer*)&m_f_show_scan_ui);
|
||||
HGBase_GetDllProcAddress(m_saneUIDll, "show_devlist_ui", (HGPointer*)&m_f_show_devlist_ui);
|
||||
HGBase_GetDllProcAddress(m_saneUIDll, "show_setting_ui", (HGPointer*)&m_f_show_setting_ui);
|
||||
HGBase_GetDllProcAddress(m_saneUIDll, "show_scan_ui", (HGPointer*)&m_f_show_scan_ui);
|
||||
}
|
||||
|
||||
if (SANE_STATUS_GOOD != m_f_sane_init(NULL, NULL))
|
||||
{
|
||||
HGBase_DestroyDll(m_saneDlgDll);
|
||||
m_saneDlgDll = NULL;
|
||||
HGBase_DestroyDll(m_saneUIDll);
|
||||
m_saneUIDll = NULL;
|
||||
HGBase_DestroyDll(m_dll);
|
||||
m_dll = NULL;
|
||||
return HGSANE_ERR_FAIL;
|
||||
|
@ -80,8 +79,8 @@ HGResult HGSaneManagerImpl::Destroy()
|
|||
|
||||
m_f_sane_exit();
|
||||
|
||||
HGBase_DestroyDll(m_saneDlgDll);
|
||||
m_saneDlgDll = NULL;
|
||||
HGBase_DestroyDll(m_saneUIDll);
|
||||
m_saneUIDll = NULL;
|
||||
HGBase_DestroyDll(m_dll);
|
||||
m_dll = NULL;
|
||||
return HGBASE_ERR_OK;
|
||||
|
@ -183,14 +182,20 @@ HGResult HGSaneManagerImpl::OpenSelectedDevice(HGWindow parent, class HGSaneDevi
|
|||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
SANE_Handle handle = m_f_show_devlist_ui(&m_saneApi, parent);
|
||||
SANE_Handle handle = NULL;
|
||||
char devName[256] = {0};
|
||||
if (-2 == m_f_show_devlist_ui(&m_saneApi, parent, &handle, devName, 256))
|
||||
{
|
||||
return HGBASE_ERR_NOTSUPPORT;
|
||||
}
|
||||
|
||||
if (NULL == handle)
|
||||
{
|
||||
return HGSANE_ERR_FAIL;
|
||||
}
|
||||
|
||||
HGSaneDeviceImpl* newDeviceImpl = new HGSaneDeviceImpl(this);
|
||||
HGResult ret = newDeviceImpl->Init(handle);
|
||||
HGResult ret = newDeviceImpl->Init(devName, handle);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
delete newDeviceImpl;
|
||||
|
@ -294,6 +299,7 @@ void HGSaneManagerImpl::RemoveDevice(class HGSaneDeviceImpl* deviceImpl)
|
|||
HGSaneDeviceImpl::HGSaneDeviceImpl(HGSaneManagerImpl* mgrImpl)
|
||||
{
|
||||
m_mgrImpl = mgrImpl;
|
||||
m_devName.clear();
|
||||
m_devHandle = NULL;
|
||||
m_buffer = NULL;
|
||||
m_bufferSize = 0;
|
||||
|
@ -311,10 +317,16 @@ HGSaneDeviceImpl::~HGSaneDeviceImpl()
|
|||
|
||||
}
|
||||
|
||||
HGResult HGSaneDeviceImpl::Init(SANE_Handle handle)
|
||||
HGResult HGSaneDeviceImpl::Init(const HGChar* devName, SANE_Handle handle)
|
||||
{
|
||||
assert(NULL == m_devHandle);
|
||||
|
||||
if (NULL == devName || NULL == handle)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
m_devName = devName;
|
||||
m_mgrImpl->m_f_sane_set_io_mode(handle, SANE_FALSE);
|
||||
m_devHandle = handle;
|
||||
return HGBASE_ERR_OK;
|
||||
|
@ -345,6 +357,7 @@ HGResult HGSaneDeviceImpl::Open(const HGChar* devName, HGChar* errInfo, HGUInt e
|
|||
return HGSANE_ERR_FAIL;
|
||||
}
|
||||
|
||||
m_devName = devName;
|
||||
m_mgrImpl->m_f_sane_set_io_mode(handle, SANE_FALSE);
|
||||
m_devHandle = handle;
|
||||
return HGBASE_ERR_OK;
|
||||
|
@ -357,10 +370,24 @@ HGResult HGSaneDeviceImpl::Close()
|
|||
Stop();
|
||||
m_mgrImpl->m_f_sane_close(m_devHandle);
|
||||
m_devHandle = NULL;
|
||||
m_devName.clear();
|
||||
m_mgrImpl->RemoveDevice(this);
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGSaneDeviceImpl::GetName(HGChar* name, HGUInt maxLen)
|
||||
{
|
||||
if (NULL == name || 0 == maxLen)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
if (maxLen < m_devName.size() + 1)
|
||||
return HGBASE_ERR_FAIL;
|
||||
strcpy(name, m_devName.c_str());
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGSaneDeviceImpl::ShowSettingDlg(HGWindow parent)
|
||||
{
|
||||
if (NULL != m_thread)
|
||||
|
@ -373,7 +400,11 @@ HGResult HGSaneDeviceImpl::ShowSettingDlg(HGWindow parent)
|
|||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
m_mgrImpl->m_f_show_setting_ui(&m_mgrImpl->m_saneApi, m_devHandle, parent);
|
||||
if (-2 == m_mgrImpl->m_f_show_setting_ui(&m_mgrImpl->m_saneApi, m_devHandle, parent))
|
||||
{
|
||||
return HGBASE_ERR_NOTSUPPORT;
|
||||
}
|
||||
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
|
@ -476,7 +507,12 @@ HGResult HGSaneDeviceImpl::StartWithUI(HGWindow parent, HGSane_DeviceImageFunc i
|
|||
m_dpi = GetDpi();
|
||||
m_imageFunc = imageFunc;
|
||||
m_imageParam = imageParam;
|
||||
m_mgrImpl->m_f_show_scan_ui(&m_mgrImpl->m_saneApi, m_devHandle, parent, ShowScanImageCallback, this);
|
||||
|
||||
if (-2 == m_mgrImpl->m_f_show_scan_ui(&m_mgrImpl->m_saneApi, m_devHandle, parent, ShowScanImageCallback, this))
|
||||
{
|
||||
return HGBASE_ERR_NOTSUPPORT;
|
||||
}
|
||||
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "sane/sane_ex.h"
|
||||
#include <list>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
typedef SANE_Status (*f_sane_init)(SANE_Int* version_code, SANE_Auth_Callback authorize);
|
||||
typedef void (*f_sane_exit)(void);
|
||||
|
@ -24,10 +25,10 @@ typedef SANE_Status (*f_sane_get_parameters)(SANE_Handle handle, SANE_Parameters
|
|||
typedef const SANE_Option_Descriptor* (*f_sane_get_option_descriptor)(SANE_Handle handle, SANE_Int option);
|
||||
typedef SANE_Status (*f_sane_control_option)(SANE_Handle handle, SANE_Int option, SANE_Action action, void* value, SANE_Int* info);
|
||||
|
||||
typedef SANE_Handle (*f_show_devlist_ui)(SANEAPI* saneApi, HGWindow parent);
|
||||
typedef void (*f_show_setting_ui)(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent);
|
||||
typedef void (*f_show_scan_ui_image_callback)(const SANE_Parameters *imageFormat, const SANE_Byte *imageData, void * callbackParam);
|
||||
typedef void (*f_show_scan_ui)(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent, f_show_scan_ui_image_callback callback, void *callbackParam);
|
||||
typedef void (*f_show_scan_ui_image_callback)(const SANE_Parameters* imageFormat, const SANE_Byte* imageData, void* callbackParam);
|
||||
typedef int (*f_show_devlist_ui)(SANEAPI* saneApi, HGWindow parent, SANE_Handle *handle, char *devName, unsigned int maxLen);
|
||||
typedef int (*f_show_setting_ui)(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent);
|
||||
typedef int (*f_show_scan_ui)(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent, f_show_scan_ui_image_callback callback, void *callbackParam);
|
||||
|
||||
class HGSaneManagerImpl
|
||||
{
|
||||
|
@ -64,7 +65,7 @@ private:
|
|||
f_sane_control_option m_f_sane_control_option;
|
||||
SANEAPI m_saneApi;
|
||||
|
||||
HGDll m_saneDlgDll;
|
||||
HGDll m_saneUIDll;
|
||||
f_show_devlist_ui m_f_show_devlist_ui;
|
||||
f_show_setting_ui m_f_show_setting_ui;
|
||||
f_show_scan_ui m_f_show_scan_ui;
|
||||
|
@ -78,9 +79,10 @@ public:
|
|||
HGSaneDeviceImpl(HGSaneManagerImpl* mgrImpl);
|
||||
~HGSaneDeviceImpl();
|
||||
|
||||
HGResult Init(SANE_Handle handle);
|
||||
HGResult Init(const HGChar* devName, SANE_Handle handle);
|
||||
HGResult Open(const HGChar *devName, HGChar* errInfo, HGUInt errInfoLen);
|
||||
HGResult Close();
|
||||
HGResult GetName(HGChar* name, HGUInt maxLen);
|
||||
HGResult ShowSettingDlg(HGWindow parent);
|
||||
HGResult Start(HGSane_DeviceEventFunc eventFunc, HGPointer eventParam,
|
||||
HGSane_DeviceImageFunc imageFunc, HGPointer imageParam, HGChar* errInfo, HGUInt errInfoLen);
|
||||
|
@ -94,6 +96,7 @@ private:
|
|||
|
||||
private:
|
||||
HGSaneManagerImpl* m_mgrImpl;
|
||||
std::string m_devName;
|
||||
SANE_Handle m_devHandle;
|
||||
HGByte* m_buffer;
|
||||
HGInt m_bufferSize;
|
||||
|
|
|
@ -1,16 +1,55 @@
|
|||
#include "HGSaneUI.h"
|
||||
#include "dialog_device_select.h"
|
||||
#include "dialog_device_scan.h"
|
||||
#include <QApplication>
|
||||
|
||||
SANE_Handle show_devlist_ui(SANEAPI* saneApi, HGWindow parent)
|
||||
int show_devlist_ui(SANEAPI* saneApi, HGWindow parent, SANE_Handle *handle, char *devName, unsigned int maxLen)
|
||||
{
|
||||
return nullptr;
|
||||
if (nullptr == saneApi || nullptr == handle)
|
||||
return -1;
|
||||
if (nullptr == qApp)
|
||||
return -2;
|
||||
|
||||
QWidget *qParent = nullptr;
|
||||
#ifdef HG_CMP_MSC
|
||||
qParent = QWidget::find((WId)parent);
|
||||
if (nullptr != parent && nullptr == qParent)
|
||||
return -2;
|
||||
#else
|
||||
qParent = parent;
|
||||
#endif
|
||||
|
||||
*handle = nullptr;
|
||||
Dialog_Device_Select dlg(saneApi, qParent);
|
||||
if (dlg.exec())
|
||||
{
|
||||
if (nullptr != devName)
|
||||
{
|
||||
std::string strDevName = dlg.GetDevName();
|
||||
if (maxLen >= strDevName.size() + 1)
|
||||
strcpy(devName, strDevName.c_str());
|
||||
}
|
||||
|
||||
*handle = dlg.GetDevHandle();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void show_setting_ui(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent)
|
||||
int show_setting_ui(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent)
|
||||
{
|
||||
|
||||
if (nullptr == saneApi || nullptr == handle)
|
||||
return -1;
|
||||
if (nullptr == qApp)
|
||||
return -2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void show_scan_ui(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent, show_scan_ui_image_callback callback, void *callbackParam)
|
||||
int show_scan_ui(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent, show_scan_ui_image_callback callback, void *callbackParam)
|
||||
{
|
||||
|
||||
if (nullptr == saneApi || nullptr == handle)
|
||||
return -1;
|
||||
if (nullptr == qApp)
|
||||
return -2;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
#ifndef SANE_UI_H
|
||||
#define SANE_UI_H
|
||||
|
||||
#include "base/HGDef.h"
|
||||
#include "../base/HGDef.h"
|
||||
#include "sane/sane_ex.h"
|
||||
|
||||
typedef void (*show_scan_ui_image_callback)(const SANE_Parameters *imageFormat, const SANE_Byte *imageData, void * callbackParam);
|
||||
|
||||
HGEXPORT SANE_Handle show_devlist_ui(SANEAPI* saneApi, HGWindow parent);
|
||||
HGEXPORT void show_setting_ui(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent);
|
||||
HGEXPORT void show_scan_ui(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent, show_scan_ui_image_callback callback, void *callbackParam);
|
||||
HGEXPORT int show_devlist_ui(SANEAPI* saneApi, HGWindow parent, SANE_Handle *handle, char *devName, unsigned int maxLen);
|
||||
HGEXPORT int show_setting_ui(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent);
|
||||
HGEXPORT int show_scan_ui(SANEAPI* saneApi, SANE_Handle handle, HGWindow parent, show_scan_ui_image_callback callback, void *callbackParam);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -2,11 +2,24 @@
|
|||
#include "ui_dialog_device_select.h"
|
||||
#include <QMessageBox>
|
||||
|
||||
Dialog_Device_Select::Dialog_Device_Select(QWidget *parent) :
|
||||
Dialog_Device_Select::Dialog_Device_Select(SANEAPI* saneApi, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::Dialog_Device_Select)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
const SANE_Device** device_list;
|
||||
if (SANE_STATUS_GOOD == saneApi->sane_get_devices_api(&device_list, SANE_TRUE))
|
||||
{
|
||||
const SANE_Device** p;
|
||||
for (p = device_list; *p != nullptr; ++p)
|
||||
{
|
||||
ui->listWidget->addItem((*p)->name);
|
||||
}
|
||||
}
|
||||
|
||||
m_devHandle = nullptr;
|
||||
m_devName.clear();
|
||||
}
|
||||
|
||||
Dialog_Device_Select::~Dialog_Device_Select()
|
||||
|
@ -14,6 +27,16 @@ Dialog_Device_Select::~Dialog_Device_Select()
|
|||
delete ui;
|
||||
}
|
||||
|
||||
SANE_Handle Dialog_Device_Select::GetDevHandle()
|
||||
{
|
||||
return m_devHandle;
|
||||
}
|
||||
|
||||
std::string Dialog_Device_Select::GetDevName()
|
||||
{
|
||||
return m_devName;
|
||||
}
|
||||
|
||||
void Dialog_Device_Select::on_buttonBox_accepted()
|
||||
{
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "base/HGDef.h"
|
||||
#include "sane/sane_ex.h"
|
||||
#include <QDialog>
|
||||
#include <string>
|
||||
|
||||
namespace Ui {
|
||||
class Dialog_Device_Select;
|
||||
|
@ -14,14 +15,20 @@ class Dialog_Device_Select : public QDialog
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Dialog_Device_Select(QWidget *parent = nullptr);
|
||||
Dialog_Device_Select(SANEAPI* saneApi, QWidget *parent = nullptr);
|
||||
~Dialog_Device_Select();
|
||||
|
||||
SANE_Handle GetDevHandle();
|
||||
std::string GetDevName();
|
||||
|
||||
private slots:
|
||||
void on_buttonBox_accepted();
|
||||
|
||||
private:
|
||||
Ui::Dialog_Device_Select *ui;
|
||||
|
||||
SANE_Handle m_devHandle;
|
||||
std::string m_devName;
|
||||
};
|
||||
|
||||
#endif // DIALOG_DEVICE_SELECT_H
|
||||
|
|
|
@ -49,7 +49,7 @@ HGResult HGAPI HGTwain_GetDSCount(HGTwainDSM dsm, HGUInt* count)
|
|||
return twainDSMImpl->GetDSCount(count);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_GetDSName(HGTwainDSM dsm, HGUInt index, HGChar* name, HGUInt maxLen)
|
||||
HGResult HGAPI HGTwain_GetDSNameWithIndex(HGTwainDSM dsm, HGUInt index, HGChar* name, HGUInt maxLen)
|
||||
{
|
||||
if (NULL == dsm)
|
||||
{
|
||||
|
@ -128,6 +128,17 @@ HGResult HGAPI HGTwain_CloseDS(HGTwainDS ds)
|
|||
return twainDSImpl->Close();
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_GetDSName(HGTwainDS ds, HGChar* name, HGUInt maxLen)
|
||||
{
|
||||
if (NULL == ds)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGTwainDSImpl* twainDSImpl = (HGTwainDSImpl*)ds;
|
||||
return twainDSImpl->GetName(name, maxLen);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGTwain_EnableDSUIOnly(HGTwainDS ds, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam)
|
||||
{
|
||||
if (NULL == ds)
|
||||
|
|
|
@ -20,7 +20,7 @@ HGEXPORT HGResult HGAPI HGTwain_DestroyDSM(HGTwainDSM dsm);
|
|||
|
||||
HGEXPORT HGResult HGAPI HGTwain_GetDSCount(HGTwainDSM dsm, HGUInt* count);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_GetDSName(HGTwainDSM dsm, HGUInt index, HGChar* name, HGUInt maxLen);
|
||||
HGEXPORT HGResult HGAPI HGTwain_GetDSNameWithIndex(HGTwainDSM dsm, HGUInt index, HGChar* name, HGUInt maxLen);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_OpenDS(HGTwainDSM dsm, HGUInt index, HGTwainDS *ds);
|
||||
|
||||
|
@ -30,6 +30,8 @@ HGEXPORT HGResult HGAPI HGTwain_OpenSelectedDS(HGTwainDSM dsm, HGTwainDS* ds);
|
|||
|
||||
HGEXPORT HGResult HGAPI HGTwain_CloseDS(HGTwainDS ds);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_GetDSName(HGTwainDS ds, HGChar* name, HGUInt maxLen);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_EnableDSUIOnly(HGTwainDS ds, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam);
|
||||
|
||||
HGEXPORT HGResult HGAPI HGTwain_EnableDS(HGTwainDS ds, HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam,
|
||||
|
|
|
@ -352,6 +352,19 @@ HGResult HGTwainDSImpl::Close()
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::GetName(HGChar* name, HGUInt maxLen)
|
||||
{
|
||||
if (NULL == name || 0 == maxLen)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
if (maxLen < strlen(m_iden.ProductName) + 1)
|
||||
return HGBASE_ERR_FAIL;
|
||||
strcpy(name, m_iden.ProductName);
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGTwainDSImpl::EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam)
|
||||
{
|
||||
if (m_enable)
|
||||
|
|
|
@ -46,6 +46,7 @@ public:
|
|||
public:
|
||||
HGResult Open(const TW_IDENTITY* iden);
|
||||
HGResult Close();
|
||||
HGResult GetName(HGChar* name, HGUInt maxLen);
|
||||
HGResult EnableUIOnly(HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam);
|
||||
HGResult Enable(HGBool showUI, HWND parent, HGDSCloseReqFunc eventFunc, HGPointer eventParam,
|
||||
HGDSImageFunc imageFunc, HGPointer imageParam);
|
||||
|
|
Loading…
Reference in New Issue