project:embeddedpythonboostpython
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| project:embeddedpythonboostpython [2014/03/06 11:06] – [예제: urllib을 C++에서 사용하기] changwoo | project:embeddedpythonboostpython [2014/10/09 21:24] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| ====== Embedded Python: Boost Python ====== | ====== Embedded Python: Boost Python ====== | ||
| [[http:// | [[http:// | ||
| + | |||
| + | |||
| ===== Boost Python 개선되는 점 ===== | ===== Boost Python 개선되는 점 ===== | ||
| ==== 자동 레퍼런스 카운팅 ==== | ==== 자동 레퍼런스 카운팅 ==== | ||
| 줄 126: | 줄 128: | ||
| const char *file_name = argv[argc - 1]; | const char *file_name = argv[argc - 1]; | ||
| - | bpobj urllib | + | bpobj urllib |
| bpobj connobj = urllib.attr(" | bpobj connobj = urllib.attr(" | ||
| bpobj htmlobj = connobj.attr(" | bpobj htmlobj = connobj.attr(" | ||
| 줄 152: | 줄 154: | ||
| </ | </ | ||
| 윈속이나 소켓이 같은 보다 저수준의 API은 파이썬 영역에서 처리되어 있습니다. | 윈속이나 소켓이 같은 보다 저수준의 API은 파이썬 영역에서 처리되어 있습니다. | ||
| + | |||
| + | ===== 예제: finder C++ ===== | ||
| + | C API 기반의 [[.: | ||
| + | |||
| + | <code cpp boost_finder.cpp> | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | namespace bp = boost:: | ||
| + | typedef bp::object bpobj; | ||
| + | |||
| + | inline bpobj createObject(PyObject* op) | ||
| + | { | ||
| + | if (op == NULL) { | ||
| + | throw bp:: | ||
| + | } | ||
| + | |||
| + | return bpobj(bp:: | ||
| + | } | ||
| + | |||
| + | void boostFinder(const char* url) | ||
| + | { | ||
| + | // import module | ||
| + | bpobj module = createObject(PyImport_ImportModule(" | ||
| + | |||
| + | // get class object, instantiate the class | ||
| + | bpobj klass = module.attr(" | ||
| + | |||
| + | // url_finder.links | ||
| + | bp::list links = bp:: | ||
| + | | ||
| + | if (PyList_Check(links.ptr())) | ||
| + | { | ||
| + | typedef Py_ssize_t psz_t; | ||
| + | |||
| + | const psz_t linkSize = Py_SIZE(links.ptr()); | ||
| + | for (psz_t i = 0; i < linkSize; ++i) | ||
| + | { | ||
| + | // borrowed reference | ||
| + | std::cout << PyString_AsString(PyList_GET_ITEM(links.ptr(), | ||
| + | << ' | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | int main(int argc, char **argv) | ||
| + | { | ||
| + | if (argc < 2) { | ||
| + | std::cerr << " | ||
| + | return 1; | ||
| + | } | ||
| + | |||
| + | if (Py_Initialize(), | ||
| + | { | ||
| + | try | ||
| + | { | ||
| + | PySys_SetArgv(argc, | ||
| + | boostFinder(argv[1]); | ||
| + | } | ||
| + | catch (bp:: | ||
| + | { | ||
| + | PyErr_Print(); | ||
| + | } | ||
| + | Py_Finalize(); | ||
| + | } | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== 참고 사이트 ===== | ||
| + | * [[https:// | ||
project/embeddedpythonboostpython.1394103976.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)
