当试图重写32位Python代码以在64位系统上运行时,从何处/如何开始?

当试图重写32位Python代码以在64位系统上运行时,从何处/如何开始?,python,winapi,migration,32bit-64bit,Python,Winapi,Migration,32bit 64bit,处理Python代码,该代码在32位平台上运行良好,但在64位平台上失败。代码中除了CType之外还有Win32API调用。如何本地化只能在32位平台上运行的代码位?如果您试图重写32位代码以在64位系统上运行,您将从何处以及如何启动?并非所有32位WinAPI函数都与64位对应函数的工作原理相同。另外,有些API已被弃用,有些已被Win32弃用的API已被删除(请参阅) 如果存在对此类API的调用(在32位和64位系统上的行为会有所不同),为了便于讨论,将公共python逻辑重构为单独的单元(

处理Python代码,该代码在32位平台上运行良好,但在64位平台上失败。代码中除了CType之外还有Win32API调用。如何本地化只能在32位平台上运行的代码位?如果您试图重写32位代码以在64位系统上运行,您将从何处以及如何启动?

并非所有32位WinAPI函数都与64位对应函数的工作原理相同。另外,有些API已被弃用,有些已被Win32弃用的API已被删除(请参阅)

如果存在对此类API的调用(在32位和64位系统上的行为会有所不同),为了便于讨论,将公共python逻辑重构为单独的单元(python类、模块或函数),例如在模块common.py中。理想情况下,所有特定于平台的逻辑应放在两个单独的单元中(一个用于32位,另一个用于64位)-例如platform\u win32.pyplatform\u win64.py

加载期间的common.py文件可以基于平台检查动态导入平台_win32.py平台_win64.py。导入适当的模块后,common.py可以调用特定于平台的逻辑来执行其任务

这也指出了编写跨平台代码时的一个重要设计原则——不要在业务逻辑中直接调用特定于平台的代码。始终将特定于平台的逻辑封装在单独的模块/类中,并将这些功能作为API公开。确保此API在32位和64位版本中具有相同的签名。然后您可以有条件地导入这些API并调用它们。这种方法的优点在于,平台检查可以在程序引导过程中完成,然后加载适当的API。一旦发生这种情况,调用这些API的代码将确保触发了正确的平台特定逻辑。如果平台=='x64':else:类型检查在代码中穿插,则无需进行检查

最后,作为后续考虑:在处理核心Win32 API时使用一些良好的测试库,如。它已经具有32位和64位支持,然后您的工作将减少到只随应用程序提供正确版本的pywin32


希望这能有所帮助。

并非所有32位WinAPI函数的工作原理都与64位对应函数相同。另外,有些API已被弃用,有些已被Win32弃用的API已被删除(请参阅)

如果存在对此类API的调用(在32位和64位系统上的行为会有所不同),为了便于讨论,将公共python逻辑重构为单独的单元(python类、模块或函数),例如在模块common.py中。理想情况下,所有特定于平台的逻辑应放在两个单独的单元中(一个用于32位,另一个用于64位)-例如platform\u win32.pyplatform\u win64.py

加载期间的common.py文件可以基于平台检查动态导入平台_win32.py平台_win64.py。导入适当的模块后,common.py可以调用特定于平台的逻辑来执行其任务

这也指出了编写跨平台代码时的一个重要设计原则——不要在业务逻辑中直接调用特定于平台的代码。始终将特定于平台的逻辑封装在单独的模块/类中,并将这些功能作为API公开。确保此API在32位和64位版本中具有相同的签名。然后您可以有条件地导入这些API并调用它们。这种方法的优点在于,平台检查可以在程序引导过程中完成,然后加载适当的API。一旦发生这种情况,调用这些API的代码将确保触发了正确的平台特定逻辑。如果平台=='x64':else:
类型检查在代码中穿插,则无需进行检查

最后,作为后续考虑:在处理核心Win32 API时使用一些良好的测试库,如。它已经具有32位和64位支持,然后您的工作将减少到只随应用程序提供正确版本的pywin32

希望这有帮助