将Python嵌入到C中

时间:2013-06-17 17:00:42

标签: python c windows

Win7 x64,Python3.3 32位,Visual Studio 2010/2012(相同的行为)。以下代码编译并运行得很好(即打印当前日期):

extern "C"{ // not having it doesn't make any difference either
#include <Python.h>
}

int main() {
    Py_Initialize();
    PyRun_SimpleString("from time import time,ctime\n"
        "print('Today is', ctime(time()))\n");
    Py_Finalize();
    return 0;
}

虽然这里失败了,但是在执行The application was unable to start correctly (0xc0000005). Click OK to close the application.之前,MessageBox说main(所以没有断点可能)。

extern "C"{ // not having it doesn't make any difference either
#include <Python.h>
}

int main() {
    Py_Initialize();
    PyObject *p = PyUnicode_FromString("test");
    Py_Finalize();
    return 0;
}

3 个答案:

答案 0 :(得分:1)

所以问题似乎如下:我正在与python3.lib进行链接,但由于字符串函数完全被Python3.3过度工作,因此正确链接它们似乎存在一些问题。 (无法解释为什么会出现这种情况,因为PyUnicode_FromString在早期版本的python3中也很明显存在。)

为什么我无法获得有关该事实的有用错误消息也超出了我的意思,但我们就去了:链接python33.lib完全解决了问题。

答案 1 :(得分:0)

我认为这可能有两个原因,但我很确定这一点:

http://docs.python.org/2/c-api/unicode.html

你需要通过使它成为“test \ 0”来终止我们的常量字符串“test”。如果这不起作用,可能与c文件是ansi而不是utf8的事实有关。

答案 2 :(得分:0)

您破坏的程序链接到使用UCS-2作为内部unicode表示的Python构建,但安装的Python使用UCS-4,因此PyUnicodeUCS2_*导入不能解决。您需要改为链接UCS-4版本。