встраивание 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 ответ:
Пример кода, который вы использовали, относится к древней версии Python, 2.3.2. Питон 3.x line ввела ряд несовместимостей не только в языке, но и в C API.
Функции, которые вы упомянули, просто больше не существуют в Python 3.2.
PyString_
функции были переименованы вPyBytes_
.
PyInt_
функции исчезли, вместо них следует использоватьPyLong_
.Вот тот же пример, который вы использовали, но для Python 3:
Примечание что он использует
PyUnicode_
вместоPyString_/PyBytes_
. Во многих местах, где Python 2.x использовал байтовые строки, Python 3.X использует Юникод.Кстати, я обычно использую эту страницу для поиска всех возможных вызовов: