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调试配置

vs2015利用python加载dll调试配置_python脚本

命令行执行 python testdll.py

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