簡體   English   中英

使用 Python Ctypes 調用 Windows 64 Dll

[英]Calling Windows 64 Dll with Python Ctypes

我正在嘗試使用 ctypes 從 python 調用SimpleMotionv2庫,它似乎進行了調用,但當我為其提供有效的 com 端口時它總是返回 -1。

我已經構建了 DLL 和我正在嘗試調用的 function 似乎已正確導出:

DLL 導出查看器 Output

我以某種方式錯誤地傳遞了 COM 端口號? 我在 windows 及其 COM5...

我正在調用的 function 是smOpenBus()並在此處列出:

smbus smOpenBus( const char * devicename )
{
    int handle;

    //true on first call
    if(smInitialized==smfalse)
        smBusesInit();

    //find free handle
    for(handle=0;handle<SM_MAX_BUSES;handle++)
    {
        if(smBus[handle].opened==smfalse) break;//choose this
    }
    //all handles in use
    if(handle>=SM_MAX_BUSES) return -1;

    //open bus device
    smBus[handle].bdHandle=smBDOpen(devicename);
    if(smBus[handle].bdHandle==-1) return -1;

    //success
    strncpy( smBus[handle].busDeviceName, devicename, SM_BUSDEVICENAME_LEN );
    smBus[handle].busDeviceName[SM_BUSDEVICENAME_LEN-1]=0;//null terminate string
    smBus[handle].opened=smtrue;
    return handle;
}

我的 Python 代碼是:

import ctypes as ct

dll = ct.CDLL(r'./SMv2_x64.dll')

dll.smOpenBus.argtypes = ct.c_char_p,
dll.smOpenBus.restype = ct.c_long

ret_val = dll.smOpenBus(b'COM24')
print(ret_val)

我究竟做錯了什么?

我試過制作 c_wchar_p 和 c_char_p 類型的 ptr,添加 NULL 終止符和字符串而不是...我希望得到 COM 端口句柄返回並且我得到 -1。

它是argtypes (復數)並且是一個元組。 c_char_p適用於 C char*

dll.smOpenBus.argtypes = ct.c_char_p, # comma makes a 1-tuple

然后傳遞一個字節串:

ret_val = dll.smOpenBus(b'COM5')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM