2009-12-30 6 views
-1

나는 다음과 같은 파이썬 3 파일이 있습니다파이썬 코드를 C++ 응용 프로그램에서 사용하려면 어떻게해야합니까?

import base64 
import xxx 

str = xxx.GetString() 
str2 = base64.b64encode(str.encode()) 
str3 = str2.decode() 
print str3 

xxx는 일부 C++ 코드로 내 보낸 모듈입니다. 이 스크립트에서 Py_InitModule을 호출하면 NULL이 반환되기 때문에이 스크립트는 작동하지 않습니다. 나는 같은 디렉토리

def GetString() : 
    return "test" 

에서 스텁 xxx.py을 만들고 python.exe를 아래에있는 원래의 스크립트를 실행하면 이상한 점은 작동하고 base64로 문자열을 출력합니다. 내 질문은 xxx.GetString의 반환 값을 좋아하지 않는 이유는 무엇입니까? C++ 코드에서 문자열 객체를 반환합니다. 내 질문에 충분히 설명했으면 좋겠어. 이상한 오류 야.

+3

C++ 코드를 게시하지 않으면이 질문에 대한 답변을 얻을 수 없습니다. 오류가 있습니다. 파이썬 코드에는 아무 문제가 없습니다. – dmazzoni

+0

@George : 태그 이름 "C++"을 추가하십시오 ... 또한 C++ 코드를 게시하십시오. – wrapperm

+0

태그를 수정했습니다. 최대한 빨리 코드를 추가하겠습니다. –

답변

0

Py_InitModule()은 확장 모듈을 초기화하는 데 사용되며 여기서는 찾고자하지 않습니다. C에서 모듈을 가져 오려는 경우 C API에서 사용할 수있는 다양한 기능이 있습니다. http://docs.python.org/c-api/import.html

그러나 실제로 모듈을 가져 오기보다는 스크립트를 실행하려면 다음 중 하나를 사용하십시오. 여기에 설명 된 PyRun_XXX() 함수는 다음과 같습니다. http://docs.python.org/c-api/veryhigh.html

+0

후자는 내가 의도 한 것이지만 여전히 실행되지 않습니다 ... 그것은 유니 코드 대신 ASCII 문자열을 반환하는 GetString과 관련이 있는지 궁금합니다. –

+0

여기입니다 창 Py_BuildValue ("S", "테스트"); –

+0

아직도 많은 의미가 있습니다! Py_BuildValue()의 결과를 사용하는 코드를 게시하십시오. 당신이하고자하는 일에 관한 부분적이고 타원적인 정보를 제공하는 것이 우리가 당신의 문제를 정확하게 진단하는데 충분하다는 것을 가정하지 마십시오. –

0

어 ... 당신은 Py_InitModule는 NULL을 반환 이유를 조사해야합니다. 해당 모듈을 사용하여 파이썬 코드를 게시하면 도움이되지 않습니다.

+0

NULL을 반환하는 이유를 모르겠다 - 아무것도 콘솔에 인쇄되지 않습니다. 기다려주십시오. 나는 네가하는 말을 보았다. 위의 스크립트를 Py_InitModule로로드하려고 시도 할 때 NULL이 반환되고 다른 일부 모듈에서는로드되지 않습니다. –

+0

나는 질문을 수정했다. –

1

저는 모두가이 말을 알고 있습니다. 그러나 : Boost에는 클래스를 파이썬 노출 및 이리저리로 가져 오는 훌륭한 라이브러리가 있습니다. 만약 당신이 문제가 있고 대안을 찾고 있다면, 나는 C 인터페이스의 부스트 파이썬 라이브러리를 강력히 추천 할 것이다. 나는 그것들을 모두 사용했고, 부스트는 손 아래로 내려 갔다.

관련 문제