打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于JNI实现TWAIN接口
我要实现JAVA的扫描仪调用
我通过C++调用TWAIN接口,生成DLL
通过JAVA的JNI调用DLL
=======================================
目前EnableDS后TWAIN对话框出来了,但通过消息循环,无法得到扫描和关闭事件消息
=======================================
JAVA部分的实现:
程序启动时列出所有可用设备
按钮事件选择并OPENDS那个设备
另一个按钮事件ENABLEDS那个设备
--------------------------------------------------
C++部分代码:

JNIEXPORT void JNICALL Java_main_Main_enableDS
  (JNIEnv *$env, jclass $cls, jboolean $showUI, jboolean $model){
    JAVA_CATCH_BEGIN("启动设备")
    g_twainTools.EnableDS($showUI == JNI_TRUE, $model == JNI_TRUE);
    MSG msg;
    TW_UINT16 dsMsg = 0xFF;
    while(GetMessage(&msg, NULL, 0, 0)) {
        if (!g_twainTools.TWAIN_MessageLoop(&msg, dsMsg)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    JAVA_CATCH_END
}
void CoTwain::EnableDS(bool $showUI, bool $model) throw(CoTwainException) {
    CATCH_BEGIN("启动设备")
    // 状态检查
    TW_INT32 validStatus[] = {
        STAT_SOURCE_OPENED
    };
    CHECKSTATUS(validStatus, actionName);

    TW_USERINTERFACE twUI;
    twUI.ShowUI = $showUI;
    twUI.ModalUI = $model;
    twUI.hParent = m_hMainWnd;

    TW_UINT16 rc = m_lpfnDsmEntry(&m_AppId, &m_SourceID, DG_CONTROL, DAT_USERINTERFACE,
            MSG_ENABLEDS, &twUI);
    if (rc == TWRC_SUCCESS) {
        _status = STAT_SOURCE_ENABLED;
    } else {
        DSMEXCEPTION(actionName, rc);
    }
    CATCH_END
}
bool CoTwain::TWAIN_MessageLoop(const PMSG $pMsg, TW_UINT16 &$dsMsg) throw(CoTwainException) {
    CATCH_BEGIN("消息循环")
    if (0 == m_SourceID.Id) return false;
    TW_EVENT twEvent;
    twEvent.pEvent = $pMsg;
    twEvent.TWMessage = MSG_NULL;

    TW_UINT16 rc = m_lpfnDsmEntry(&m_AppId, &m_SourceID
            , DG_CONTROL, DAT_EVENT, MSG_PROCESSEVENT
            , &twEvent);
    $dsMsg = twEvent.TWMessage;
    // 是设备事件时
    if (TWRC_NOTDSEVENT != rc) {
        if (MSG_XFERREADY == twEvent.TWMessage) {
            _status = STAT_SOURCE_READY;
            return true;
        } else if (MSG_CLOSEDSREQ == twEvent.TWMessage) {
            _status = STAT_SOURCE_ENABLED;
            return true;
        }
        return true;
    }
    return false;
    CATCH_END
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
雅思口语 助你上8分的固定表达
C++调用JAVA方法详解
Healy-World_TW-ZH_Presentation_Compensation-Plan.pdf
如何使用TW
基本RC积分电路及原理分析
RC电路的应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服