C++ 将64位计算机上的端口限制为32位

C++ 将64位计算机上的端口限制为32位,c++,32bit-64bit,C++,32bit 64bit,我有一个32位运行良好的库;但是,客户端需要从64位应用程序链接它。但是,更改指针的大小是一个问题,因为我们必须将它们存储在32位值中 是否可以告诉编译器(Visual Studio和GCC)创建64位库,但在内部仅使用32位地址空间?否。sizeof(void*)在很大程度上是一个常量。它可以是4或8,但不能是4和8。否。sizeof(void*)在很大程度上是一个常数。它可以是4或8,但不能是4和8。解释在Windows中让64位应用程序使用32位模块的魔力。应用程序及其加载的任何外部模块都

我有一个32位运行良好的库;但是,客户端需要从64位应用程序链接它。但是,更改指针的大小是一个问题,因为我们必须将它们存储在32位值中


是否可以告诉编译器(Visual Studio和GCC)创建64位库,但在内部仅使用32位地址空间?

否。
sizeof(void*)
在很大程度上是一个常量。它可以是4或8,但不能是4和8。

否。
sizeof(void*)
在很大程度上是一个常数。它可以是4或8,但不能是4和8。

解释在Windows中让64位应用程序使用32位模块的魔力。应用程序及其加载的任何外部模块都是64位或32位的。你说“必须以32位值存储它们”是什么意思。除非您使用uint32或数据类型来存储指针而不是指针类型,否则编译x64体系结构的库应该是一个问题。此外,如果您使用而不是已知的
int
类型来存储指针,则(在Windows中)也可以防止这种情况发生。那么这一切都是透明的。@SergeyA实际上在linux上有x32 ABI。可能也不会有帮助,但在64位模式下运行并不一定意味着指针必须为64位。我的建议是更改适合指针大小类型的数据类型,重新编译64位代码,修复发现的任何错误。比试图在64位类型中仅使用32位来欺骗用户要好。请解释一下在Windows中让64位应用程序使用32位模块的神奇之处。应用程序及其加载的任何外部模块都是64位或32位的。你说“必须以32位值存储它们”是什么意思。除非您使用uint32或数据类型来存储指针而不是指针类型,否则编译x64体系结构的库应该是一个问题。此外,如果您使用而不是已知的
int
类型来存储指针,则(在Windows中)也可以防止这种情况发生。那么这一切都是透明的。@SergeyA实际上在linux上有x32 ABI。可能也不会有帮助,但在64位模式下运行并不一定意味着指针必须为64位。我的建议是更改适合指针大小类型的数据类型,重新编译64位代码,修复发现的任何错误。总比在64位类型中只使用32位来欺骗好。