2014-11-20 4 views
-1

참고 : 전체 코드가 있으므로 현재 here에 저장되어 있습니다.기능이 제대로 작동하지 않습니다.

그래서 두 파일이 있습니다. CPP 파일은 ctypes를 사용하여 Python과 통합하는 C.so 라이브러리의 일부입니다. 내가 test.py를 실행할 때, 그것은 그때 인쇄 된 변수 "텍스트"로

interfaceLib.concatString() 

의 반환 유형을 지정하더라도 아무것도 인쇄되지 않습니다.

답변

0

ctypes의 함수 호출은 기본적으로 int를 반환합니다. 라이브러리 함수의 restype을 지정해야합니다.

지금은 텍스트 오류 파일 "test.py", 라인 (10)을 얻을
from ctypes import CDLL, c_char_p 

interfaceLib = CDLL('Shared_Lib/bin/Library/libShared_Lib.so') 

interfaceLib.test() 
str1 = "H" 
str2 = "I" 
interfaceLib.concatString.argtypes = [c_char_p, c_char_p] 
interfaceLib.concatString.restype = c_char_p 
text = interfaceLib.concatString(str1.encode('utf-8'), str2.encode('utf-8')) 
print(text) 
+0

= interfaceLib.concatString (STR1, STR2) ctypes.ArgumentError : 인수 한 다음 시도 <클래스 '형식 오류' > : wrong type – Axmill

+0

'interfaceLib.concatString.argtypes = [c_char_p, c_char_p]'줄을 제거하거나 문자열을'encode '로 바이트 배열로 변환 해보십시오 (편집 된 답변 참조). 'argtypes' 설정은 정수, 문자열 또는 바이트 배열에는 필요하지 않지만 다른 모든 유형에는 필요합니다. – mhavu

+0

C 인터페이스는 C++'string' 객체를 사용할 수 없습니다. 그것을'char *'로 변경하십시오. – eryksun

관련 문제