c++ - 在可移植应用程序中使用 Windows DLL

标签 c++ windows linux dll portability

我构建了一个 Windows C++ 应用程序,我想将其移植到 Linux。这样做的主要原因是便于我们的 IT 员工进行系统维护。除了运行此应用程序的一台 Windows 机器外,我们仅在 Linux 上运行。

此应用程序内置于 Windows 并在 Windows 上运行的原因是它使用 Windows API(dll 和 header )连接到属于外部方的服务器。此连接使用了一些我不想乱用的专有协议(protocol)(而且我认为契约(Contract)上不允许这样做)所以我只能使用 .dll。

这个 dll 是 windows 只是因为(我怀疑)dll 中的 windows 套接字特定代码。除此之外,它并没有做很多高级的事情。在 WINE 中仅在 linux 上运行应用程序和嗅探协议(protocol)并自己重新实现 DLL 之间有什么方法可以让我在 linux 机器上运行这个应用程序吗?

这个想法是受这个 item about QT creator 启发的所以任何允许我使用它的解决方案都会非常酷。

最佳答案

最明显的中间立场是使用 Winelib .我不知道它是否可以直接链接到 native DLL,但如果不能,您可能可以使用 LoadLibrary() 加载它。

然后您可以将您的应用程序分成两部分:一个只调用 DLL 的包装器,以及与您的包装器通信的其余代码。您可以将两者放在不同的进程中,因此只有包装器必须使用 Winelib 进行编译。然后,应用程序的其余部分可以使用您想要的任何框架。

关于c++ - 在可移植应用程序中使用 Windows DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/276562/

相关文章:

C++ 递归问题

c++ - 以编程方式获取 powershell.exe 的完整路径

linux - 我可以在升级主机后运行 Docker 容器吗?

c++ - Socket.IO CPP 客户端示例(std::bind 的使用)

c++ - C++ 中是否有等效的 var 类型?

c++ - 使用 HDF5 C++ 编写动态大小的复合类型数据集

windows - 防止多次安装

windows - 如何使用批处理文件连接到 Oracle DB

python - 如何使用 Raspberry Pi motion 播放音频文件?可能的权限问题?

linux - WSL2 - Linux 相对符号链接(symbolic link)在仅针对\\wsl$\挂载点从 Windows 访问时损坏