project:embeddedpythonboostpython
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
project:embeddedpythonboostpython [2014/03/06 11:05] – 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 개선되는 점 ===== | ||
==== 자동 레퍼런스 카운팅 ==== | ==== 자동 레퍼런스 카운팅 ==== | ||
줄 93: | 줄 95: | ||
===== 예제: urllib을 C++에서 사용하기 ===== | ===== 예제: urllib을 C++에서 사용하기 ===== | ||
다음 코드는 C++에서 파이썬 ' | 다음 코드는 C++에서 파이썬 ' | ||
- | < | + | < |
#include < | #include < | ||
#include < | #include < | ||
줄 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.1394103942.txt.gz · 마지막으로 수정됨: 2014/10/09 21:23 (바깥 편집)