[英]Segfault on calling standard windows .dll from python ctypes with wine
[英]Calling Windows 64 Dll with Python Ctypes
我正在嘗試使用 ctypes 從 python 調用SimpleMotionv2庫,它似乎進行了調用,但當我為其提供有效的 com 端口時它總是返回 -1。
我已經構建了 DLL 和我正在嘗試調用的 function 似乎已正確導出:
我以某種方式錯誤地傳遞了 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.