ctype을 사용하여 C 함수에 액세스하는 방법을 테스트하는 간단한 C 라이브러리 파일을 만들었습니다.ctypes가있는 C 라이브러리 모듈을 호출하면 잘못된 결과가 나타납니다.
는 C라는 이름의 파일 tetr.c의 기능을 읽
double square(double x){
return x*x;
}
는 그래서 수의 제곱을 반환합니다.
것은 나는 다음과 같은 사용하여 오브젝트 파일로 컴파일했습니다
gcc -c tetr.c -o tetr.o
과 공유 객체 파일에
사용 :gcc -shared -Wl,-soname,library.so -o tetr.so tetr.o
지금까지 너무 좋아. 내가 ipython 쉘을 호출하고 내 라이브러리 LIB 변수로 설정 : 내가 lib.square(ctypes.c_double(2.0))
전화 줄 때
import ctypes
lib = ctypes.cdll.LoadLibrary("tetr.so")
는 물론, 그것은 나에게 4.0
를 제공해야합니다. 대신 1
이 나옵니다. 그리고 함수 제곱에 삽입 한 모든 숫자, 심지어 0으로도 마찬가지입니다.
짧은 통지, 나는 제로를 얻을 수 있기 때문에 그없이 내 함수 내에서 ctypes.c_double
를 사용했을 때 입력 정수 및
ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know how to convert parameter 1
때 입력 더블 부동 소수점 /.
내가 잘못하고 있을지도 모르는 아이디어가 있습니까?
너무 반환 값을 (캐스팅)로 변환해야합니까? –
내가 왜해야하는지 모르겠다. 그 생각에 감사드립니다. – milia
아니, 같은 결과. – milia