【发布时间】:2012-04-19 20:07:15
【问题描述】:
我需要在 Windows 上用 C++ 实现一个简约的类似 osgi 的模块化框架。与 Java 类似,我想将模块作为独立单元、动态链接库来发布。虽然 .jar 文件实际上是容器,但 .dll 文件实际上是一些已编译的代码块。因此,甚至可以将元数据存储在 .dll 文件中并在 C++ 程序中访问它吗?
【问题讨论】:
我需要在 Windows 上用 C++ 实现一个简约的类似 osgi 的模块化框架。与 Java 类似,我想将模块作为独立单元、动态链接库来发布。虽然 .jar 文件实际上是容器,但 .dll 文件实际上是一些已编译的代码块。因此,甚至可以将元数据存储在 .dll 文件中并在 C++ 程序中访问它吗?
【问题讨论】:
最简单的方法是将元数据作为资源存储在 DLL 中。然后,您可以使用 Windows API 资源函数来提取元数据。您甚至不需要将 DLL 作为代码模块加载,只需将其加载为数据模块,然后提取元数据资源即可。
使用LoadLibrary 来加载库。然后您可以使用FindResource 和LoadResource 来提取您的元数据。
【讨论】:
LoadLibraryEx(... , LOAD_LIBRARY_AS_DATAFILE)(在 Vista 及更高版本中,有更多专用选项可用)。