2012-03-19 3 views
1

Windows에서 SWIG를 사용하여 64 비트 응용 프로그램을 작성하고 싶습니다. 버퍼에 포인터가있는 클래스가 있고 .NET 클래스와 인터페이스하기 때문에 포인터는 intptr_t으로 선언됩니다.SWIG가 Windows에서 intptr_t에 64 비트 정수를 사용하는 방법

문제는 표준 SWIG stdint.iintptr_t 어느 int (32 비트 환경에서) 또는 long (64 비트 환경에서) 인 것으로 가정한다는 것이다. 유닉스에서는 이것이 사실이지만, 윈도우에서는 거짓이다. 누구도 이와 비슷한 경험이나 아이디어를 가지고이 문제를 해결할 방법을 찾고 있습니까?

intptr_t =>IntPtr 변환에 필요한 typemaps를 이미 설정했으며 32 비트 환경에서는 정상적으로 작동하지만 64 비트 환경에서는 포인터가 잘립니다.

답변

0

좋아, 나는 내 자신의 질문에 대답 할 것이다. Windows에서 SWIG의 버그 인 것 같습니다. 즉, longint64으로 처리하고 실제로는 int32입니다. 를 참조하십시오 여기에이 항목에 대한 자세한 : What is the bit size of long on 64-bit Windows?

꿀꺽 꿀꺽와 다른 문제는 32 비트 및 64 비트 코드를 구분한다는 것입니다,하지만 난 intptr_t을 사용하는 이유는 정의가 충분히 큰 정수를주기 때문에, 비트 수의 문제를 방지하는 것이 었습니다 포인터를 잡으십시오.

그럼 마지막에 수행 한 스크립트는 형식 서명을 int에서 intptr_t으로 수정하기 위해 래퍼를 생성 한 후 실행하는 스크립트를 작성하는 것입니다. 이것이 우아하지는 않지만, 필자는 파이썬과 PHP 래퍼의 다른 이유로이 작업을 수행해야합니다.