如何在c++项目中仅使用.dll文件使用动态库



我已经用c++中的cmake生成了一个动态库。如果没有库的.h或.cpp文件,我如何在另一个c++项目中使用它。我只有.dll文件。

至少有两种方法:

  • 从.dll文件生成.lib/.def(或其他文件(,并将它们用于宿主应用程序。您可以看到implib、mkexp等实用程序
  • 使用API:LoadLibrary进行加载,使用GetProcAddress获取函数指针。有c++包装:请参阅boost::dll::import_alias

当您提到dll时,我假设您在Windows平台上。您可以使用dumpbin /exports someLib.dll等工具列出dll导出的函数,然后使用GetProcAddress创建指向这些函数的函数指针。

如果你需要更复杂的东西,比如使用C++类型,这可能会变得更复杂,甚至不可能,因为你需要链接到标准库的确切版本、编译器版本和编译器标志。

例如,如果dll中有函数void myFunction(const std::string&),则必须确保可执行文件中的std::stringdll中的函数二进制兼容。如果它们不是二进制兼容的,您将很难找到并解决运行时错误。即使您有标题,这也适用,这就是像QT这样的库提供相同dll的多个版本的原因

最新更新