始终(正确)为C中定义的函数指定argtypes和restype,否则(C89样式)它们将默认为int(通常为32位),生成!!! 未定义的行为!。在64位,地址(大于2 GiB)将被截断(这正是您正在经历的)。
同一错误的另一个后果:[SO]:不同操作系统上的python ctypes问题(@CristiFati的回答)。
此外,遇到问题时,不要忘记[Python 3.Docs]:ctypes - Python的外部函数库。
下面是您的代码的改编版本。
detector.cpp:
#include
#include
#include
#define C_TAG "From C"
#define PRINT_MSG_2SP(ARG0, ARG1) printf("%s - [%s] (%d) - [%s]: %s: 0x%0p\n", C_TAG, __FILE__, __LINE__, __FUNCTION__, ARG0, ARG1)
using std::endl;
std::ofstream outFile;
class Detector {
public:
Detector();
void process(int *pIn, int *pOut, int n);
private:
int m_var;
};
Detector::Detector()
: m_var(0) {
outFile.open("addr_debug.txt&#