如何使SWIG在Windows上使用64位整数作为intptr_t

时间:2012-03-19 16:01:56

标签: 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位环境中截断指针。

1 个答案:

答案 0 :(得分:0)

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

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

所以我最后做的是编写一个脚本,我在生成包装器后运行该脚本以修复从intintptr_t的类型签名。虽然这不是很优雅,但由于我的Python和PHP包装器的其他原因,我必须这样做。