gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:17:55 25 4
gpt4 key购买 nike

我想在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com