내가 가지고있는 py_embed
스레드에 전달하기 위해이 같은 내 main_thread
에 여러 번 숯불 포인터가 loop_p
에게 전화를 내가 전화를 반환하는 함수 :호출 스레드는 다른 결과
SENDTOPY
HANDLE handle;
SENDTOPY *cmd=new SENDTOPY();
char* msg=loop_p(ac);
char *argv[4]={"PythonPlugIn2","bridge","test_callsign",msg};
cmd->argc=4;
for(int i = 0; i < NUM_ARGUMENTS; i++)
{
cmd->argv[i] = argv[i];
}
handle=(HANDLE) _beginthread(py_embed,0,(void*)cmd);}
는 구조체이다
typedef struct{
int argc;
char *argv[4];
}SENDTOPY;
는 이런 파이썬 전송 된 메시지와 파이썬 잘 수신 :
SENDTOPY *arg=(SENDTOPY*)data;
pArgs2=Py_BuildValue("(s)",arg->argv[4]);
pValue2 = PyObject_CallObject(pFunc, pArgs2);
메모리 할당 문제가 발생하지 않도록하려면 loop_p
함수를 std::string
을 반환하는 함수로 수정했습니다. 나는 전후 main_thread
에 TEXTFILE과 메시지에 인쇄
typedef struct{
int argc;
char *argv[3];
const char* msg;
}SENDTOPY;
을 :
...
std::string msg_python=loop_p(ac);
const char * msg2=msg_python.data();
char *argv[3]={"PythonPlugIn2","bridge","test_callsign"};
cmd->argc=3;
cmd->msg=msg2;
for(...
...
그리고 난 여기에 구조체 SENDTOPY
수정 : I는 약간의 수정으로 main_thread
에 해당 문자열을 호출 변경 사항은 동일합니다. 그러나 py_embed
스레드에서 const char은 더 이상 존재하지 않으며 단지 횡설수설 무리입니다. 내가 도대체 뭘 잘못하고있는 겁니까?
미리 감사드립니다.
편집 : loop_p 코드 당신은 스택에 생성 된 임시 문자열 객체의 내부 용기에 대한 포인터를 저장하는 것을 그것은 나에게 나타납니다
std::string CNewDisplay::loop_p(int ac){
std::string res("Number of Aircrafts\nHour of simulation\n\n");
for (...
....
//Route
textfile<<fp.GetRoute()<<endl;
std::string route=fp.GetRoute();
std::replace(route.begin(),route.end(),' ',',');
res+=route;
res.append(",\n");
res.append("\n\n");
};
return res;
}
루프백 코드가 포함되어 있지 않은 이유를 잘 모르겠지만 msg_python.data()를 msg_python.c_str()으로 수정하여 null로 끝나는 C 스타일 문자열을 얻고 있는지 확인해야합니다. – Steger
그 함수의 끝에서 결과가 예상되기 때문에 나는'loop_p' 코드를 포함하지 않았습니다. 'msg_python.c_str()'에'msg_python.data()'를 넣고 시도해 본 결과는 –
과 같습니다. 어떻게 함수를 호출하는 파이썬 문자열이 C 함수가 호출 될 때까지 데이터를 가지고 있는지, 또는 그 반대의 경우도 마찬가지입니다. – Claris