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("\nstart ==")

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

 

posted @   jiftle  阅读(1730)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
历史上的今天:
2017-11-14 JAVA中使用P和Q分量计算N和D进行RSA运算
2017-11-14 VirtualBox虚拟机和主机之间的通信
点击右上角即可分享
微信分享提示