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

vs2015调试配置

命令行执行 python testdll.py

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

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

vs2015利用python加载dll调试配置的更多相关文章

  1. MONO加载DLL调试命令

    http://www.mono-project.com/docs/advanced/pinvoke/dllnotfoundexception/ http://www.mono-project.com/ ...

  2. 利用ChromeOptions()加载用户配置

    一. 如何绕过页面登录 我们在登录网站的时候,通常需要输入用户名.密码和验证码,那么有没有办法绕过登录环节呢? 有两种方法可以解决这个问题,一种是利用chrome浏览器的用户配置,一种是利用cooki ...

  3. C# 利用反射动态加载dll

    笔者遇到的一个问题,dll文件在客户端可以加载成功,在web端引用程序报错.解决方法:利用反射动态加载dll 头部引用加: using System.Reflection; 主要代码: Assembl ...

  4. 加载dll过程中assembly失败

    错误现象: 进行插件读取时出现错误:“尝试从一个网络位置加载程序集,在早期版本的 .NET Framework 中,这会导致对该程序集进行沙盒处理.此发行版的 .NET Framework 默认情况下 ...

  5. KEngine:Unity3D资源的打包、加载、调试监控

    资源模块做什么? 资源模块——ResourceModule,是KEngine中最核心的模块,其他模块基本或多或少的对它有依赖,它主要的功能是:资源打包.路径定义.资源管理.资源调试. 资源模块对Uni ...

  6. 关于Windows平台下应用程序加载DLL模块的问题.

    本文将讨论以下问题: (1)Windows可执行程序会从哪些目录下加载DLL. (2)如何将可执行使用的DLL放置到统一的目录下,而不是与EXE同一目录. (3)可执行程序加载了不该加载的DLL. ( ...

  7. c#动态加载dll文件

    1.在写一个记录日志到文件中的类库(生成dll文件copy到一个目录中去,然后在主函数的appconfig中去配置. using System; using System.Collections.Ge ...

  8. Windows x86 x64使用SetThreadContext注入shellcode的方式加载DLL

    一.前言 注入DLL的方式有很多,在R3就有远程线程CreateRemoteThread.SetWindowsHookEx.QueueUserApc.SetThreadContext 在R0可以使用a ...

  9. asp.net调用非托管dll,无法加载 DLL,找不到指定模块解决方法。

    最近开发一个项目,里面用到了非.net开发的一个dll文件接口,发现发布到window2003服务器上后,运行网站总是提示 "无法加载 DLL"D:\11\1.dll": ...

随机推荐

  1. HDU 4301 Divide Chocolate (DP + 递推)

    Divide Chocolate Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  2. php sockent通信

    1.php服务端:server.php <?php //确保在连接客户端时不会超时 set_time_limit(0); $ip = '127.0.0.1'; $port = 1935; /* ...

  3. CentOS 7 systemd的坑

    一.概述 在从 CentOS 6 迁移到 CentOS 7 的过程中,可能有一些地方需要调整,最显著的地方莫过于 systemd 带来的改变,不同的管理服务的方式,不同的日志方式,设置时区,时间等等. ...

  4. 【C#】Skip和Tack方法实现分页

    int pageIndex = SearchModel.PageIndex <= 0 ? 1 : SearchModel.PageIndex; return BatchInfoList.Skip ...

  5. HTML页面中显示HTML标签<xmp>

    最近做东西遇到一个HTML页面中显示HTML标签的需求,比如要显示</span> 解决方法如下 HTML页面中显示HTML标签代码,可以使用<xmp>html标签内容</ ...

  6. Swift 值类型/引用类型

    1.值类型/引用类型 在 Swift 语言中,所有的类型都可以被分为 "值类型" 或者 "引用类型",可以将其理解为函数参数传递的方式. 值类型表示的是将它传递 ...

  7. 为什么 c = tf.matmul(a, b) 不立即执行矩阵乘法?

    在 TensorFlow Python API 中,a.b 和 c 是  tf.Tensor  对象.Tensor 对象是指令结果的符号句柄,但它实际上并不存放指令的输出值.相反,TensorFlow ...

  8. php-fpm进程关闭与重启脚本详解

    先来理解一下什么是php-fpm PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的. PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中.必须将 ...

  9. Asp.net2.0之自定义控件ImageButton

    控件模仿winform中的button,可以支持图片和文字.可以选择执行服务器端程序还是客户端程序,还有一些简单的设置. 不足的是不支持样式,下次希望可以写一个工具条. 以下就是代码 以下为引用的内容 ...

  10. 关于 SqlParameter 必须知道的!

    有时候写 SqlParameter 映射 new SqlParameter("@RecordId", SqlDbType.BigInt, 0, "RecordId&quo ...