Re: [問題] 關於Python呼叫dll

看板Python作者 (偶爾想擺爛一下)時間15年前 (2010/06/02 14:26), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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

06/02 21:20, , 1F
雖然細節上還不是很瞭解,但是我試著去換得結果是sbc(callback
06/02 21:20, 1F

06/02 21:22, , 2F
產生error:...probably called with too many arguments
06/02 21:22, 2F

06/02 21:22, , 3F
(4 bytes in excess)
06/02 21:22, 3F
文章代碼(AID): #1C1Vc9vM (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1C1Vc9vM (Python)