【发布时间】:2015-04-27 04:49:11
【问题描述】:
我需要封装一个接口的C函数
double foo(double)
到python,以便在python控制台中
>>foo_py(2.9)
应该给我 foo(2.9) 的 double 值。最终,我在 scipy 中使用了导出的 foo_py。
我一直在寻找包装这样一个 C 函数的 最简单 方法。stackoverflow 上肯定有很多相关的帖子,但它们都是几年前的,现在我正在寻找对于我的具体需求的更新答案。谢谢。
[编辑] 有关信息,我尝试使用 PyObj 等进行 C 扩展。这方面的文档似乎缺乏。我还尝试了将 C++ 函数包装到 Python 的 Boost.Python。这里我需要对 C 函数进行包装(以避免命名拆解等问题)。
【问题讨论】:
-
使用 ctypes 应该很简单:stackoverflow.com/a/145649/1470749
-
@figs 谢谢。你给我的链接看起来很不错。等别人回复的时候让我看看。
-
@fig 奇怪。包装的函数总是返回 0。我的代码就像他的: import ctypes from ctypes import cdll lib=cdll.LoadLibrary("./libfoo.so") lib.foo_r.argtypes=(ctypes.c_double,) lib.foo_r.restypes=ctypes.c_double print lib. foo_r(9)
-
奇怪,您必须发布所有 Python 和 C 代码供我们检查。
-
@fig 感谢您的帮助。我的 C 代码很大。上面发布为 cmets 的 python 代码。稍后我可能会打开一个新帖子,但现在我使用 Everlisle 的解决方案。有用。谢谢。