c++ - 如何让 SWIG 在 Windows 上为 intptr_t 使用 64 位整数

标签 c++ windows 32bit-64bit swig intptr

我想在 Windows 上使用 SWIG 来构建 64 位应用程序。我有一个类,其中有一个指向缓冲区的指针,因为我想与 .NET 类交互,所以该指针声明为 intptr_t

问题在于标准 SWIG stdint.i 假定 intptr_tint(在 32 位环境中)或 long(在 64 位环境中)。虽然这在 Unix 上是正确的,但在 Windows 上却是错误的。有没有人有类似的经验或任何想法如何为此创建解决方法?

我已经设置了 intptr_t => IntPtr 转换所需的类型映射,它在 32 位环境中工作正常,但它在 64 位环境中截断了指针.

最佳答案

好的,我会回答我自己的问题。这似乎是 Windows 上 SWIG 中的一个错误,它在 64 位 Windows 上将 long 视为 int64,而实际上它是一个 int32。在此处查看有关此主题的更多信息: What is the bit size of long on 64-bit Windows?

SWIG 的另一个问题是它区分 32 位和 64 位代码,但我使用 intptr_t 的原因是为了避免位数问题,因为根据定义它给出了一个足够大的整数来容纳一个指针.

所以我最后所做的是编写一个脚本,在生成包装器后运行,以将类型签名从 int 修复为 intptr_t。虽然这并不优雅,但出于其他原因,我已经不得不为我的 Python 和 PHP 包装器执行此操作。

关于c++ - 如何让 SWIG 在 Windows 上为 intptr_t 使用 64 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773558/

相关文章:

c++ - 在 Win 7 64 位/3gb 开关(-GF LARGEADDRESSAWARE )下运行 32 位 Borland XE2 应用程序?

windows - 符号链接(symbolic link)限制 - Windows

linux - 你能在 64 位机器上编译 32 位 Apache DSOs (Oracle HTTP Server) 吗?

32bit-64bit - 安装32位和64位Oracle客户端,但32位安装程序崩溃

c++ - 宏扩展中的语法错误

c++ - 如何在不使用 boost 或创建模板的情况下在 C++ 中同时对两个 vector 进行排序?

python - 让 Scapy 在 Windows 上工作时出错 : "' module' object has no attribute 'ex_name' "

c++ - 将 32 位移植到 64 位时处理问题的正确方法。从 DT1 转换为更大尺寸的 DT2

c++ - 如何对陀螺仪数据进行离散积分?

c++ - 如何在 C++ 中使用基类的构造函数和赋值运算符?