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 = ;
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调试配置的更多相关文章
- MONO加载DLL调试命令
http://www.mono-project.com/docs/advanced/pinvoke/dllnotfoundexception/ http://www.mono-project.com/ ...
- 利用ChromeOptions()加载用户配置
一. 如何绕过页面登录 我们在登录网站的时候,通常需要输入用户名.密码和验证码,那么有没有办法绕过登录环节呢? 有两种方法可以解决这个问题,一种是利用chrome浏览器的用户配置,一种是利用cooki ...
- C# 利用反射动态加载dll
笔者遇到的一个问题,dll文件在客户端可以加载成功,在web端引用程序报错.解决方法:利用反射动态加载dll 头部引用加: using System.Reflection; 主要代码: Assembl ...
- 加载dll过程中assembly失败
错误现象: 进行插件读取时出现错误:“尝试从一个网络位置加载程序集,在早期版本的 .NET Framework 中,这会导致对该程序集进行沙盒处理.此发行版的 .NET Framework 默认情况下 ...
- KEngine:Unity3D资源的打包、加载、调试监控
资源模块做什么? 资源模块——ResourceModule,是KEngine中最核心的模块,其他模块基本或多或少的对它有依赖,它主要的功能是:资源打包.路径定义.资源管理.资源调试. 资源模块对Uni ...
- 关于Windows平台下应用程序加载DLL模块的问题.
本文将讨论以下问题: (1)Windows可执行程序会从哪些目录下加载DLL. (2)如何将可执行使用的DLL放置到统一的目录下,而不是与EXE同一目录. (3)可执行程序加载了不该加载的DLL. ( ...
- c#动态加载dll文件
1.在写一个记录日志到文件中的类库(生成dll文件copy到一个目录中去,然后在主函数的appconfig中去配置. using System; using System.Collections.Ge ...
- Windows x86 x64使用SetThreadContext注入shellcode的方式加载DLL
一.前言 注入DLL的方式有很多,在R3就有远程线程CreateRemoteThread.SetWindowsHookEx.QueueUserApc.SetThreadContext 在R0可以使用a ...
- asp.net调用非托管dll,无法加载 DLL,找不到指定模块解决方法。
最近开发一个项目,里面用到了非.net开发的一个dll文件接口,发现发布到window2003服务器上后,运行网站总是提示 "无法加载 DLL"D:\11\1.dll": ...
随机推荐
- 有关于malloc申请内存和free内存释放
malloc工作机制: malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表(堆内存).调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块. ...
- 树莓派SD卡制作,并成功启动
需要条件: 硬件部分: 1.SD卡一张(树莓派支持的) 2.树莓派3 B + 一个(其他的版本也是可以的,这里默3B+). 1.下载树莓派镜像(NOOBS_v1_9_2.zip) wget http: ...
- iOS 一个小动画效果-b
近期工作不忙,来一个需求感觉棒棒的,是一个比较简单的页面,如下图(图1) 图1 应该很简单吧,没什么大的功能,就是一个展示,一个拨打电话,拨打电话不需要说,几行代码搞定,基本UI也不用说了,刚培训完的 ...
- MongoDB学习笔记(7)--- 条件操作符
描述 条件操作符用于比较两个表达式并从mongoDB集合中获取数据. 在本章节中,我们将讨论如何在MongoDB中使用条件操作符. MongoDB中条件操作符有: (>) 大于 - $gt (& ...
- mysqld Can’t start server : Bind on unix socket: Permission denied
启动mysql报错: mysqld Can’t start server : Bind on unix socket: Permission denied 原因: mysql.sock无法建立,权限问 ...
- Java/Android倒计时(开始,暂停,恢复,停止)
由于要做暂停和恢复,这里我就没有使用Android的CountDownTimer,而是用了Java的Timer.所以,这个方法在java肯定是通用.我也外加了Android独有的Service,有些计 ...
- ios开发中用过的一些外部库总结 cocoapods list
下面几个库是在之前的一个ios app开发中使用过的一些外部库: 1. zbar :2. shakebox :3. processbar :4. tableviewcontroller :新版的sta ...
- 在没有创建Provision Profile权限的情况下 发布Enterprise inhouse app 的方法
由于用普通开发者证书,发布的app或ipa没法在普通机器上安装运行,原因是apple限制了普通开发者发布appstore以外的环境中,只有Enterprise企业版证书才能发布inhouse. 今天在 ...
- Python 文件 flush() 方法
描述 Python 文件 flush() 方法是用来把文件从内存buffer(缓冲区)中强制刷新到硬盘中,同时清空缓冲区. 一般情况下,文件关闭后会自动刷新到硬盘中,但有时你需要在关闭前刷新到硬盘中, ...
- 怎样让HTML 表格中内容自动换行??
<table style="word-break:break-all; word-wrap:break-all;">