• vs2015利用python加载dll调试配置


    python调用dll相对而言比较方便,写个脚本调试轻松工作,快乐生活。

    python脚本

    from ctypes import *
    import time
    
    
    # 脚本挂起
    input()
    
    # load dll __stdcall 方式
    dll = windll.LoadLibrary('IDPSOLID510Lib.dll');
    
    print("dll handle=",dll);
    
    
    #获取版本号
    p_version = create_string_buffer(512);
    ret = dll.get_version(p_version);
    
    s = string_at(p_version,-1).decode('gbk');
    
    print("ret=",ret," version= ",s);
    
    # 调用结果例子
    # ret= 0  version=  model: CardScriptComplier | version: v1.0.1.20180214
    
    # 枚举设备
    ret = dll.EnumDevice(p_version);
    
    # 连接设备
    ret = dll.ConnectDevice(p_version);
    
    print("
    start ==")
    
    for i in range(15):
        print("--------count index: %d --------" % (i+1))
        # 进卡
        ret = dll.MoveCard_In(p_version);
        ret = dll.MoveCard_RF(p_version);
    
        # 模拟洗卡过程
        time.sleep(6.5)
    
        # 出卡
        # ret = dll.MoveCard_Out(p_version);
        ret = dll.MoveCard_OutBack(p_version);
    
    print("end ==")
    
    # 关闭设备
    ret = dll.DisConnectDevice(p_version);
    
    # GetDeviceInfo
    # GetDeviceStatus
    # 
    # MoveCard_OutBack
    print("ret=",ret);

    dll代码--def模块定义文件

    ; IDPSOLID510Lib.def : 声明 DLL 的模块参数。
    
    LIBRARY      "IDPSOLID510Lib"
    
    EXPORTS
        ; 此处可以是显式导出
        get_version
        EnumDevice
        ConnectDevice
        DisConnectDevice
        GetDeviceInfo
        GetDeviceStatus
        MoveCard_In
        MoveCard_RF
        MoveCard_Out
        MoveCard_OutBack

    dll代码

    EXTERN_C int WINAPI GetDeviceInfo()
    {
        int ret = 0;
        SMART_PRINTER_INFO DevInfo;
    
        // get info
        ret = smartCommon.GetDeviceInfo2(&DevInfo, szDev, 1);
        if (ret != 0)
        {
            ErrorLog(gobal_logger, __FILE__, __LINE__, "getdeviceinfo fail, errcode=%x", ret);
            return -1;
        }
    
        return ret;
    }
    
    EXTERN_C int WINAPI GetDeviceStatus(char*)
    {
        int ret = 0;
        long long status = 0;
    
        ret = smartCommon.GetStatus(&status);
        if (ret != 0)
        {
            ErrorLog(gobal_logger, __FILE__, __LINE__, "getdevicestatus fail, errcode=%x", ret);
            return -1;
        }
    
        return ret;
    }
    
    EXTERN_C int WINAPI MoveCard_In(char* ErrMsg)
    {
        int ret = 0;
    
        ret = smartCommon.CardIn();
        if (ret != 0)
        {
            ErrorLog(gobal_logger, __FILE__, __LINE__, "movecard_in fail, errcode=%x", ret);
            return -1;
        }
    
        return ret;
    }
    
    EXTERN_C int WINAPI MoveCard_RF(char*)
    {
        int ret = 0;
    
        ret = smartCommon.Move(CARDPOS_RF);
        if (ret != 0)
        {
            ErrorLog(gobal_logger, __FILE__, __LINE__, "movecard_rf fail, errcode=%x", ret);
            return -1;
        }
    
        return ret;
    }
    
    EXTERN_C int WINAPI MoveCard_Out(char*)
    {
        int ret = 0;
    
        ret = smartCommon.CardOut();
        if (ret != 0)
        {
            ErrorLog(gobal_logger, __FILE__, __LINE__, "movecard_out fail, errcode=%x", ret);
            return -1;
        }
    
        return ret;
    }
    
    EXTERN_C int WINAPI MoveCard_OutBack(char*)
    {
        int ret = 0;
    
        ret = smartCommon.CardOutBack();
        if (ret != 0)
        {
            ErrorLog(gobal_logger, __FILE__, __LINE__, "cardoutback fail, errcode=%x", ret);
            return -1;
        }
    
        return ret;
    }

    vs2015调试配置

    命令行执行 python testdll.py

    启动vc调试,断点就到了。

    参考: https://blog.csdn.net/lacoucou/article/details/80066637

  • 相关阅读:
    AppCrawler自动化遍历使用详解(版本2.1.0 )
    python 接口测试1 --如何创建和打印日志文件
    通过Xshell登录远程服务器实时查看log日志
    java基础知识6-- 抽象类,抽象方法,接口,构造方法,类方法等易混淆的知识点
    java基础知识5--集合类(Set,List,Map)和迭代器Iterator的使用
    java基础知识4--数组的常用方法(Array)
    java基础知识3--如何获取资源文件(Java中获取资源文件的url)
    java基础知识2--String,StringBufffer,StringBuilder的区别
    java基础知识1--String常用方法总结
    javascript正则表达式验证密码(必须含数字字符特殊符号,长度4-16位之间)
  • 原文地址:https://www.cnblogs.com/jiftle/p/9958535.html
Copyright © 2020-2023  润新知