boost::python 을 쓰게 된지도 1년 남짓이 되었습니다.
vc6 -> vc2005 로 바꾼 이후 컴파일 속도가 상대적(-_-)으로 빨라져서 쓰게되었습니다만...
이제 슬슬 인내력의 한계에 다다르게 되었습니다. 와아아아 =ㅁ=)/ 제길슨!
컴파일 속도도 답답하고
확장해서 쓰려고 해도 소스 코드도 개판이라 흑흑 ~(- -)~
그래서 며칠을 고민하던끝에
swig 나 한번 볼까 했는데!
엄청 편하군요 orz;
사용예 보기
inferna.h
#pragma once
#include <windows.h>
#include <string>
class Inferna_SystemHandler
{
public:
virtual ~Inferna_SystemHandler() {}
virtual void OnInit() = 0;
virtual void OnExit() = 0;
};
class TestSystemHandler : public Inferna_SystemHandler
{
public:
TestSystemHandler() : test("kldgjalsdkgj")
{}
virtual ~TestSystemHandler() {}
virtual void OnInit() {}
virtual void OnExit() {}
std::string test;
};
void Inferna_RunApp(Inferna_SystemHandler* systemHandler);
void Inferna_EmbedTool(HWND hWnd, Inferna_SystemHandler* systemHandler);
inferna.i
%module inferna
%{
#include "inferna.h"
%}
%include "../inferna.h"
swig.exe -Wall -c++ -python inferna.i
헤더 파일만 정리 잘해서 연결만 시켜주면 끝이라는 사실이 너무 감동적입니다.
컴파일 속도도 빠른데다가
boost 에 비해서 읽을 수 있는 코드라는 점이 -_-)~
너무 너무 마음에 듭니다.
생성 코드 보기
짜잔~
SWIGINTERN PyObject *_wrap_Inferna_RunApp(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
Inferna_SystemHandler *arg1 = (Inferna_SystemHandler *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject * obj0 = 0 ;
if (!PyArg_ParseTuple(args,(char *)"O:Inferna_RunApp",&obj0)) SWIG_fail;
res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Inferna_SystemHandler, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Inferna_RunApp" "', argument " "1"" of type '" "Inferna_SystemHandler *""'");
}
arg1 = reinterpret_cast< Inferna_SystemHandler * >(argp1);
Inferna_RunApp(arg1);
resultobj = SWIG_Py_Void();
return resultobj;
fail:
return NULL;
}
와하하 ~(-_-)~
shared_ptr 하고 weak_ptr 만 되면 boost::python 은 내다버려야겠어요.
트랙백 주소 :: http://myevan.net/trackback/115
트랙백 RSS :: http://myevan.net/rss/trackback/115
트랙백 ATOM :: http://myevan.net/atom/trackback/115
댓글을 달아 주세요
댓글 RSS 주소 : http://myevan.net/rss/comment/115댓글 ATOM 주소 : http://myevan.net/atom/comment/115
Simplified Wrapper and Interface Generator?
음.. *.i 파일을 swig.exe 로 실행 시키면,
*.i 에 정의된 c++ 코드를 python 으로 연결해주는
코드가 생성되는 식인거죠?
그럼..
1. python 에 빼줄 C++ 코드 작업
2. swig 로 코드 생성
3. 다시 컴파일
4. 파이썬에서 사용
같이 되는건가요?
.. 왠지 스텝이 너무 길어져 버린거 같..
그냥 헤더만 잘 만드면 끝이삼 -_-)>
.....음 어려워요~ 무슨말인지 모르겠어요~
흑흑 -_-)>
나중에 시간나면 자세히 써볼께요