我有以下问题。如有任何帮助,我们将不胜感激:)
我试图用ctypes从Python调用一个C函数。我已经成功地将共享库(.dll on Windows with MS Visual Studio 2017)共享到Python 3.6.3。在
尝试调用以下函数时出现问题:
__declspec(dllexport) void printFunc()
{
printf("hello world !!");
//fflush(stdout);
}
我希望看到Python解释器的输出为“hello world!!”当我执行任务时
^{pr2}$目前我在执行上面的代码时没有看到任何输出(因为restype是None)。在
运行脚本后Python解释器的预期输出:
>>> hello world !!
有什么想法吗??在
你的“你好世界!!”无论如何都应该打印出来。可能stdout被重定向到某个你看不到的地方?或者线路缓冲有问题,请在您的
printf()
调用后尝试fflush(stdout)
。这些函数的默认返回类型是
int
。您不显式地返回一个int,所以只将碰巧在某个cpu寄存器中的某个值作为返回值。很可能是printf()
的返回值,在本例中是14(打印的字符数)您可以通过发出:
mydll.printFunc.restype = None
将返回类型更改为void
,然后您不应该看到任何整数作为(python)函数调用的返回值。如果您想让输出在python解释器而不是stdout,那么必须从函数中返回字符串,而不是传递给
printf()
,并相应地调整返回类型:一。在
在python解释器中:
^{pr2}$相关问题 更多 >
编程相关推荐