请问python如何将一个函数的函数指针传给dll?

shakaqrj 2011-06-08 10:50:52
我要做个c++编写的dll,里面需要有一个回调函数,调用python代码中的函数

因此需要在开始将python中的函数的函数指针作为参数传进去

请问怎么弄?
...全文
550 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
神-气 2013-10-11
  • 打赏
  • 举报
回复
引用 9 楼 shakaqrj 的回复:
哦,把CDLL换成WinDLL就没问题了 还不是很理解这几者的区别... 谢谢iambic,每次都是你热心帮忙~~
good
shakaqrj 2011-06-08
  • 打赏
  • 举报
回复
用法不太懂,打包以后不存在py文件了

没有把函数指针作参数传递给dll中的方法么?
iambic 2011-06-08
  • 打赏
  • 举报
回复
PyModule_GetDict是python.h里的。
shakaqrj 2011-06-08
  • 打赏
  • 举报
回复
PyModule_GetDict不是Python里的么?

我想在c++的dll中调用Python中的函数啊
iambic 2011-06-08
  • 打赏
  • 举报
回复
先用PyModule_GetDict拿到模块,然后用PyDict_GetItemString从模块里取出函数,然后用PyObject_CallObject调用函数。
iambic 2011-06-08
  • 打赏
  • 举报
回复
就是C语言里_stdcall和_cdecl的区别。网上文章非常多。因为这个属于底层的细节,对照下汇编指令会比较清楚。
shakaqrj 2011-06-08
  • 打赏
  • 举报
回复
哦,把CDLL换成WinDLL就没问题了

还不是很理解这几者的区别...

谢谢iambic,每次都是你热心帮忙~~
iambic 2011-06-08
  • 打赏
  • 举报
回复
DLL里的函数原型是什么?不会是C++的成员函数吧。
shakaqrj 2011-06-08
  • 打赏
  • 举报
回复
好像不只是函数指针的问题,我把参数换成简单的int型,也是报这错...
难道和MFC的dll有关?我以前写的都没问题的啊
shakaqrj 2011-06-08
  • 打赏
  • 举报
回复
是前者
http://mail.python.org/pipermail/python-list/2010-August/1251339.html
这个和我的需求有点像,但我还是运行不正确...

载入dll的部分

XXXDLL=ctypes.CDLL("XXX.dll")
glOnInit=XXXDll.OnInit
glOnInit.argtypes=[ctypes.CFUNCTYPE(ctypes.c_int)]

函数定义


def TestFunc():
return 1


调用

TestFuncPtr=ctypes.CFUNCTYPE(ctypes.c_int)
_testFunc=TestFuncPtr(TestFunc)
glOnInit(_testFunc)


老是报错:ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong calling convention


iambic 2011-06-08
  • 打赏
  • 举报
回复
你是要从Python代码里传一个Python函数到C里,还是从C里传一个Python函数到C里?
前者google python ctypes callback,后者google embedding python。都不是的话把问题重新表述清楚。

37,742

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧