在便携式应用程序中使用 Windows DLL
Posted
技术标签:
【中文标题】在便携式应用程序中使用 Windows DLL【英文标题】:Using windows DLLs in a portable app 【发布时间】:2008-11-09 22:17:22 【问题描述】:我已经构建了一个我想移植到 linux 的 windows C++ 应用程序。这样做的主要原因是便于我们的 IT 员工进行系统维护。除了运行这个应用程序的一台 Windows 机器之外,我们是一个仅限 linux 的操作。
此应用程序内置并在 Windows 上运行的原因是它使用 Windows API(dll 和标头)连接到属于外部方的服务器。这个连接使用了一些我真的不想乱用的专有协议,(而且我认为我在合同上不允许这样做)所以我坚持使用 .dll。
这个 dll 是 windows 只是因为(我怀疑) dll 中的 windows 套接字特定代码。除此之外,它并没有做很多高级的事情。在 WINE 中在 linux 上运行应用程序和嗅探协议并自己重新实现 DLL 之间有什么方法可以让我让这个应用程序在 linux 机器上运行?
这个想法是受到item about QT creator 的启发,所以任何可以让我玩的解决方案都会非常酷。
【问题讨论】:
Wine 现在已经很完善了,所以最简单的可能就是在 Wine 中运行这样的程序。如果您可以将程序移植到 mingw 工具链,您仍然可以仅在 Linux 上维护和运行它,根本不需要 Windows。你可以使用标准的 gnu make 和一切。 【参考方案1】:最明显的中间立场是使用Winelib。我不知道它是否可以直接链接到本机 DLL,但如果不能,您可能可以使用 LoadLibrary()
加载它。
然后您可以将您的应用程序分成两部分:一个仅调用 DLL 的包装器,以及与您的包装器对话的其余代码。您可以在单独的进程中同时拥有这两者,因此只有包装器必须使用 Winelib 进行编译。然后应用程序的其余部分可以使用您想要的任何框架。
【讨论】:
以上是关于在便携式应用程序中使用 Windows DLL的主要内容,如果未能解决你的问题,请参考以下文章