我正在使用 MacOSX 10.8.2 和最新的 xcode 和股票 python 解释器在 Mac 上开发。
这是我放入的一些代码fails.cpp
#include <iostream>
using namespace std;
extern "C" {
void mysort(long *data, long data2) {
cout << hex << *data << ' ' << data2 << endl;
}
}
这是一些从我放入的python中调用它的代码fails.py
:
import ctypes
sort_dll = ctypes.CDLL("fails.dylib")
mysort = ctypes.CFUNCTYPE(None, ctypes.POINTER(ctypes.c_long), ctypes.c_long)(sort_dll.mysort)
a = ctypes.c_long(0x987654321)
mysort(ctypes.byref(a), 0x123456789)
我编译并运行
c++ -arch x86_64 -o fails.o -c fails.cpp && g++ -o fails.dylib -dynamiclib fails.o && python fails.py
结果是:
987654321 23456789
为什么按值传递的 64 位整数被截断为 32 位?令人惊讶的是,指向 64 位 long 的指针没有被截断。