如何导出依赖于其他DLL的DLL?

时间:2015-10-12 06:03:13

标签: c++ dll

假设我有一个EXE主程序,用于搜索文件夹“plugins”及其子文件夹中的DLL,然后列出所有可用DLL的插件名称。文件夹结构如下所示。

EXE
  |
  |--plugins\
       |
       |--A\   --> A.dll
       |--A-1\ --> A-1.dll
       |--B\   --> B.dll

每个DLL导出一个Plugin类,如下所示

// A.DLL
class __declspec(dllexport) A : PluginBase
{
public:
    void virtual Func( void );
};

// A-1.DLL
class __declspec(dllexport) A_1 : public A
{
public:
    void virtual Func( void );
};

// B.DLL
class __declspec(dllexport) B: public PluginBase
{
public:
    void virtual Func( void );
}

所有三个DLL都位于不同的文件夹中。在某些情况下,不希望为用户显示文件夹“A \”和A.dll,但仅显示文件夹“A-1”和A-1.dll。但是,当LoadLibrary()加载A-1.dll时,当A-1.dll与A.dll动态链接时,A.dll必须存在且可搜索。

我不想一直加载所有搜索过的DLL。相反,当用户选择插件A时,我想加载A.DLL,当用户选择插件B时,我想加载B.DLL,当用户选择插件A-1时,我想加载A-1.DLL。但是,A-1.DLL依赖于A.DLL。

我想知道是否建议A级静态链接到A-1.dll而不是动态地链接到我的情况?

1 个答案:

答案 0 :(得分:0)

使用AddDllDirectory API在PATH中添加新的搜索目录; 从MSDN检查API声明 https://msdn.microsoft.com/en-us/library/windows/desktop/hh310513%28v=vs.85%29.aspx