2013-05-02 4 views
0

C++ 프로그램에 임베드 된 작은 파이썬 스크립트가 있습니다. 파이썬 개체를 C++ 프로그램에 노출하고 C++ 변수에 값을 복사 한 후이를 구조체에 유형 변환하려고 시도했지만 예상 값을 얻지 못했습니다. 무엇이 잘못 되었습니까?] 한 시스템에서 다른 시스템으로 데이터를 보내려면 소켓 프로그래밍을 위해 python을 사용하고 있습니다.파이썬 임베딩 후에 구조체에 타입 변환

코드는 다음과 같습니다.

#include 
#include 


struct overhead{ 

    uchar8 flags; 
    uint16 seqNo, timeDiff, threshold, length; 

}; 

struct payload{ 

    float forceX,forceY,forceZ,positionX,positionY,positionZ; 

}; 

struct packet{ 

    overhead fields; 
    payload data; 

}; 

const char * msg; 

int main(){ 

    packet pack; 

    /* assign values to members of packet 
    pack.fields.threshold = 
    pack.data.forceZ = */ 

    msg = (const char *) &pack; 

    PyObject *PyMain = PyImport_AddModule("__main__"); 
    PyObject *globals = PyModule_GetDict(PyMain); 

    PyObject *string = PyString_FromString(msg); 
    PyDict_SetItemString(globals, "send", string); 

    const char* sendPy = "UDPSock.sendto(send,('10.107.35.167',2000))"; 
    PyRun_SimpleString(sendPy); 

    PyObject *temp = PyDict_GetItemString(globals, "send"); 
    const char* x = PyString_AsString(temp); 

    packet *pa = (packet *) x; 
    cout << pa->data.forceZ << endl; 



} 

그러나 출력 값은 할당 된 값과 다릅니다. 아무도 잘못 설명 할 수 있습니까?

미리 감사드립니다.

답변

0

PyString_FromString은 전달 된 문자열이 정상적인 C 문자열과 마찬가지로 null 바이트로 끝났다고 가정합니다. 귀하의 struct 아마 어딘가에 null 바이트가 포함되어 있습니다. 대신 해당 가정이없는 PyString_FromStringAndSize을 사용하십시오.

+0

통찰력을 가져 주셔서 감사합니다. PyString_FromStringAndSize가 나를 위해 속임수를 사용했습니다 :) – Vigo