встраивание python


Я пытаюсь вызвать функции python из кода C, и я следовал примеру из здесь

У меня также есть правильный include file directries, library directries и связанный python32.lib (im using python 32) однако ошибка заключалась в том, что API python/C, такие как PyString_FromString, PyInt_FromLong, PyInt_AsLong, не определены (ошибка в отладчике)

Это странно, потому что я также использую другие API, но они все в порядке...

В чем проблема - здесь??

int
main(int argc, char *argv[])
{
    PyObject *pName, *pModule, *pDict, *pFunc;
    PyObject *pArgs, *pValue;
    int i;

    if (argc < 3) {
        fprintf(stderr,"Usage: call pythonfile funcname [args]n");
        return 1;
    }

    Py_Initialize();
    pName = PyString_FromString(argv[1]);
    /* Error checking of pName left out */

    pModule = PyImport_Import(pName);
    Py_DECREF(pName);

    if (pModule != NULL) {
        pDict = PyModule_GetDict(pModule);
        /* pDict is a borrowed reference */

Py_Initialize (), PyImport_Import (), Pymodule_gettdict () все работают нормально, но не PyString_FromString...

1 7

1 ответ:

Пример кода, который вы использовали, относится к древней версии Python, 2.3.2. Питон 3.x line ввела ряд несовместимостей не только в языке, но и в C API.

Функции, которые вы упомянули, просто больше не существуют в Python 3.2.

PyString_ функции были переименованы в PyBytes_.

PyInt_ функции исчезли, вместо них следует использовать PyLong_.

Вот тот же пример, который вы использовали, но для Python 3:

5.3. Чистое Вложение

Примечание что он использует PyUnicode_ вместо PyString_/PyBytes_. Во многих местах, где Python 2.x использовал байтовые строки, Python 3.X использует Юникод.

Кстати, я обычно использую эту страницу для поиска всех возможных вызовов:

Индекс-P