1
타사 C에 정의 된 구조체 ++ 라이브러리는 다음과 같습니다ctypes와 cython 사이의 꼬리 부분을 처리하는 방법은 무엇입니까?
struct CSomeStruct {
double a;
char b;
int c;
}
하는 ctypes를 사용하여 내 사이 썬 프로젝트에 정의 된 같은 구조는 다음과 같습니다
class PSomeStructParent(ctypes.Structure):
_fields_ = [
('a', c_double),
('b', c_char)
]
class PSomeStruct(PSomeStructParent):
_fields_ = [
('c', c_int)
]
가 왜 비슷한 많은 있기 때문에 상속이 사용 같은 공통 영역 (100 개 이상)을 가진 구조. 그러나 C++ 라이브러리는 각각의 구조체에서이를 정의했습니다. C++과 ctypes에는 동일한 기본 패딩 패딩 8이 있습니다. 따라서 이러한 구조를 C++과 cython 사이에서 전송하면 메모리 버퍼가 다르고 올바르게 캐스팅 될 수 없습니다.
sizeof(CStruct) = sizeof(double)+sizeof(char)+3+sizeof(int) = 8+1+3+4 = 16
sizeof(PStruct) = sizeof(c_double)+sizeof(c_char)+7+sizeof(int)+4 = 8+1+7+4+4=24
ctypes 테딩 패딩을 처리 할 수있는 방법이 있으며 제 3 자 라이브러리에 전송할 수 있습니까? 나는 많은 분야를 반복적으로 정의 할 수는 없다.