当使用ctypes时,Cfunction中的printf()在Python中输出错误的结果

2024-04-26 19:02:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下问题。如有任何帮助,我们将不胜感激:)

我试图用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 !!

有什么想法吗??在


Tags: 函数helloworldonwindowswithctypes解释器
1条回答
网友
1楼 · 发布于 2024-04-26 19:02:02
  • 你的“你好世界!!”无论如何都应该打印出来。可能stdout被重定向到某个你看不到的地方?或者线路缓冲有问题,请在您的printf()调用后尝试fflush(stdout)

  • 这些函数的默认返回类型是int。您不显式地返回一个int,所以只将碰巧在某个cpu寄存器中的某个值作为返回值。很可能是printf()的返回值,在本例中是14(打印的字符数)

  • 您可以通过发出:mydll.printFunc.restype = None将返回类型更改为void,然后您不应该看到任何整数作为(python)函数调用的返回值。

  • 如果您想让输出在python解释器而不是stdout,那么必须从函数中返回字符串,而不是传递给printf(),并相应地调整返回类型:

一。在

 __declspec(dllexport) char *printFunc() {
     return "hello world !!";
 }

在python解释器中:

^{pr2}$

相关问题 更多 >