【发布时间】:2020-05-07 19:56:08
【问题描述】:
我有一个设计用于在 Windows 机器上运行的小型客户端应用程序。它是用 C/C++ 编写的(更多是用 C 语言)。我想让它保持小,因此我不想使用外部库并在客户端坚持使用 WinAPI。
另一方面,我有一个在 python3 中实现的后端服务器。在这里,我很乐意使用任何现有的库。现在我想添加压缩层来提高传输速度。我遇到的问题是WinAPI似乎只提供:
// source: https://docs.microsoft.com/en-us/windows/win32/cmpapi/using-the-compression-api
XPRESS
XPRESS with Huffman encoding
MSZIP
LZMS
这似乎是一个独特的微软压缩算法实现,我找不到在 python3 中解压缩服务器端数据的方法。
我有什么遗漏吗?我很想听听一些解决方案:)
提前致谢
更新
我决定按照评论中的建议使用 zlib https://zlib.net/。建议使用 ctypes 的答案也很有趣,但不幸的是我的后端是在 UNIX 系统上运行的。
当我再次使用多线程 CRT(而不是 DLL)编译我的客户端部分时,我遇到了一些问题,因为 zlib 正在与多线程 DLL 链接。如果有人遇到过这样的问题,我在这里找到了一个很棒且超级简单的解决方案:https://yongweiwu.wordpress.com/2017/10/02/a-journey-of-purely-static-linking/ 我会在这里复制粘贴:
zlib
This part requires a small change to the build script (for version 1.2.11).
I need to open win32\Makefile.msc and change all occurrences of ‘-MD’ to ‘-MT’.
Then these commands will work:
nmake -f win32\Makefile.msc zlib.lib
【问题讨论】:
-
我想保持小,因此我不想使用外部库并在客户端坚持使用 WinAPI -- 你试过
zlib?.. -
我不想使用外部库:/
-
zlib是一组实现 flate 压缩算法的 C 代码,与 PDF、PNG、TIFF 文件等中使用的压缩相同。老实说,将其视为外部库是短视的。最终可执行文件的大小差异可能也很小(您可以将“C”源代码添加到您的项目中)。 this link 还建议 Python 支持 zlib。
标签: c++ c winapi compression