Im trying to call python functions from C code, and i followed a sample from here
I also have the correct include file directries, library directries, and linked the python32.lib (im using python 32) however the error was that python/C APIs such as PyString_FromString, PyInt_FromLong, PyInt_AsLong are undefined (error in the debugger)
this is strange because im also using other APIs, but they're all fine...
whats the problem here??
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_GetDict() all work fine, but not PyString_FromString...
Embedding provides your application with the ability to implement some of the functionality of your application in Python rather than C or C++. This can be used for many purposes; one example would be to allow users to tailor the application to their needs by writing some scripts in Python.
It is possible to run embed Python within a HTML document that can be executed at run time.
Python can also be used to receive embedded system data that can be stored for analysis. Programmers can then use Python to develop parameters and other methods of analyzing that data.
The example code you used is for ancient Python version, 2.3.2. Python 3.x line introduced a number of incompatibilites not only in the language but in the C API as well.
The functions you mention simply no longer exist in Python 3.2.
PyString_
functions were renamed to PyBytes_
.
PyInt_
functions are gone, PyLong_
should be used instead.
Here's the same example that you've used but for Python 3:
5.3. Pure Embedding
Note that it's using PyUnicode_
instead of PyString_/PyBytes_
. In many places where Python 2.x used byte strings, Python 3.x uses unicode strings.
By the way, I usually use this page to look up all possible calls:
Index – P
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With