Most articles in internet is opposed concept, such as to embed C source code into python
"Extending" is called to embed C module into Python
"Embedding" is called to embed Python module into C
This article is about embedding.
My final goal is that coding opencv in python and relase to C, C++ users by dll type.
This source cod is example how to use python class in the C.
You can know easily if you see the code carefully.
..
main.cpp
#include..#ifdef _DEBUG #pragma comment(lib, "python27_d.lib") //Now, this option does not run. #else #pragma comment(lib, "python27.lib") #endif void main() { PyObject *module, *request, *mP; float rVal; Py_Initialize(); module = PyImport_ImportModule("emPy"); //.py file name if( module == NULL) { PyErr_Clear(); printf("Unable to import embed module"); } request = PyObject_CallMethod(module, "myPower", NULL); //class name if(request == NULL) { PyErr_Clear(); printf("fail to call class"); } mP = PyObject_CallMethod(request, "myPow","f",10.0); //member function name, input value if(mP == NULL) { PyErr_Clear(); printf("fail to call function"); }else{ PyArg_Parse(mP,"f", &rVal); //get value from class function of .py printf("%lf \n", rVal); } //clear if( module != NULL ) Py_DECREF(module); else PyErr_Print(); if( request != NULL ) Py_DECREF(request); else PyErr_Print(); if( mP != NULL ) Py_DECREF(mP); else PyErr_Print(); Py_Exit(0); }
emPy.py
...
class myPower: def myPow(self, inA): print inA*inA return inA*inA...
Environment setting
- emPy.py should be located same directory with main.cpp
- Path setting -> include -> "C:\Python27\include"
lib -> "C:\Python27\libs"