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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM