作者sbrhsieh (偶尔想摆烂一下)
看板Python
标题Re: [问题] 关於Python呼叫dll
时间Wed Jun 2 14:26:14 2010
※ 引述《hl4 (Minimi)》之铭言:
: 以下是dll的interface
: SetBrowseCallback(CALLBACK pFunc, DWORD dwIdentifier, DWORD dwExtData);
: BrowseServer()
: pFunc是BrowseServer()所需要的callback function
: pFunc的prototype大致如下
: (LPTSTR sServerName, LPTSTR sServerIP, LPTSTR sServerVersion,
: LPTSTR sServerType, LPTSTR sServerMAC, DWORD dwIdentifier, DWORD dwExtData)
: 我呼叫的方式如下:
: dll = ctypes.CDLL("Server.dll")
: sbc = dll.SetBrowseCallback
: sbc.restype = None
: callback_proto = ctypes.PYFUNCTYPE( None, ctypes.c_char_p, ctypes.c_char_p,
: ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, DWORD, DWORD)
: callback = callback_proto(py_callback) #py_callback print所有参数
: sbc(callback)
: dll.BrowseServer()
: 虽然没有error但是我的callback function完全没被用到
: 想请问可能是哪部分的问题应该要怎麽解决,谢谢
都没有 error?
先检查一下 SetBrowseCallback 的 calling convention 是 c call 还是
std call(WINAPI, __stdcall, __pascal),如果是後者,调用 SetBrowseCallback
的部分要修改成
dll = ctypes.WINDLL("Server.dll")
sbc = dll.SetBrowseCallback
确定 CALLBACK 的 calling convention,如果是 std call:
callback_proto = ctypes.WINFUNCTYPE(...)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.130.72
1F:推 hl4:虽然细节上还不是很了解,但是我试着去换得结果是sbc(callback 06/02 21:20
2F:→ hl4:产生error:...probably called with too many arguments 06/02 21:22
3F:→ hl4:(4 bytes in excess) 06/02 21:22