티스토리 뷰


- 먼저 MSVC++(Express 버전)에서 dll을 만든다. dll의 내용이 되는 소스는 다음과 같다.

// PyDll.cpp -> PyDll.dll
struct St {
	int x;
	char * str;
	double f;
};

extern "C" __declspec(dllexport)
void func(void* st) {
	St temp = {1, "Hello", 3.14};
	*((St*)st) = temp;
}


- Python에서 dll을 import한 다음 dll에 정의되어 있는 구조체와 동일한 구조를 갖는 ctypes.Structure를 정의한다.
그 다음 정의한 ctypes.Structure의 객체를 byref()를 통해 dll에 있는 함수에게 넘겨준다.
from ctypes import *
lib = cdll.LoadLibrary("PyDll.dll")

class Obj(Structure) :
    _fields_ = [("nNum", c_int),
                 ("lpszStr", c_char_p),
                 ("fFloat", c_double)]


obj = Obj()
lib.func(byref(obj))


- 결과는 다음과 같다.
>>> obj.nNum
1
>>> obj.lpszStr
'Hello'
>>> obj.fFloat
3.14
>>> 
댓글