Bluetooth 如何在ctypes中定义套接字结构?
我正在尝试使用ctypes在python2.5中创建蓝牙套接字(实际上是PythonCE,没有更高版本可用)。我不知道如何通过ctypes中的Bluetooth 如何在ctypes中定义套接字结构?,bluetooth,ctypes,winsock2,python-2.5,pythonce,Bluetooth,Ctypes,Winsock2,Python 2.5,Pythonce,我正在尝试使用ctypes在python2.5中创建蓝牙套接字(实际上是PythonCE,没有更高版本可用)。我不知道如何通过ctypes中的套接字(AF\u BT、SOCK\u STREAM、BTHPROTO\u RFCOMM)定义返回的套接字结构 winsock2.h #define WSAAPI FAR PASCAL ... #if INCL_WINSOCK_API_TYPEDEFS typedef SOCKET (WSAAPI * LPFN_SOCKET
套接字(AF\u BT、SOCK\u STREAM、BTHPROTO\u RFCOMM)
定义返回的套接字结构
winsock2.h
#define WSAAPI FAR PASCAL
...
#if INCL_WINSOCK_API_TYPEDEFS
typedef
SOCKET
(WSAAPI * LPFN_SOCKET)(
IN int af,
IN int type,
IN int protocol
);
#endif /* INCL_WINSOCK_API_TYPEDEFS */
我还定义了WSDATA,如下所示。对C++和cType是新的,我不确定它是否正确。
#typedef struct WSAData {
class WSADATA( Structure ):
__fields__ = [
( 'wVersion', w.WORD), # WORD wVersion;
('wHighVersion', w.WORD), # WORD wHighVersion;
('szDescription', w.CHAR * 10 ), # char szDescription[WSADESCRIPTION_LEN+1]; Null-terminated ASCII string into which the Ws2_32.dll copies a description of the Windows Sockets implementation. The text (up to 256 characters in length)
('szSystemStatus', w.CHAR * 10 ), # char szSystemStatus[WSASYS_STATUS_LEN+1]; Null-terminated ASCII string into which the WSs2_32.dll copies relevant status or configuration information.
('iMaxSockets', w.USHORT), # unsigned short iMaxSockets; Ignored for Winsock 2.0
('iMaxUdpDg', w.USHORT), # unsigned short iMaxUdpDg; Ignored for Winsock 2.0 and later
('lpVendorInfo', w.CHAR) # char FAR* lpVendorInfo; ignored for winsock v2
]
#} WSADATA, *LPWSADATA;
我想使用套接字接口,它似乎比vcom方式更容易控制(我怀疑虚拟com端口是否能在我的手持设备上工作),但winsock结构太复杂了。。。有没有办法把它们包起来,像黑匣子一样传过去。无论如何,这些描述符都不应该在python中操作。我不知道如何为WinCE构建,也不知道VStudio头文件是否与常规头文件匹配,但我发现您的
WSADATA
定义中存在问题。难道不可能使用Python包装器(套接字模块)而不是复制所有这些结构吗?嗨,这是一个蓝牙套接字,py2套接字模块似乎不支持这种类型。我想我应该试试SOCKET=c\u void\u p
?我正在创建以下所有结构,然后才能测试它是否有效。。。经过一些测试后,我将更新这个问题。问题是指lpVendorInfo指针吗?我是露西,它被忽略了,我可以得到winsocks版本。另外,我不知道FAR代表什么,这些struct def似乎有很多FAR…SOCKET是无符号long
(8字节)。如果您愿意,我可以为您定义结构(我将放置C定义和Python包装器,以便您了解如何进行),但这不能仅在答案中的注释中使用。此外,此结构只是第一步,您可能还需要定义更多内容。你可以搜索一个处理BT的Python模块,肯定有。嗨,我试过ulonglong,它不起作用。然后我觉得这个WinCE的东西更具约束性,我尝试了ulong。然后它成功了。现在我可以向打印机发送文本了。仍然存在一些编码和稳定性问题。如果我通过execfile在同一个python实例中运行同一个脚本3次,它总是会使python崩溃,并显示一些windows错误消息。但很接近。谢谢你的帮助。如果你想把它贴出来作为答案,我会接受的,顺便说一句,你是怎么知道它的长度的?这个LPFN_套接字是否被解释为指向套接字文件名或其他内容的长指针?