Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-从DLL自动加载类(Windows、Visual Studio)_C++_Dll - Fatal编程技术网

C++ C++;-从DLL自动加载类(Windows、Visual Studio)

C++ C++;-从DLL自动加载类(Windows、Visual Studio),c++,dll,C++,Dll,我有一个基类cdemnstration和多个子类(每个实现运行不同的编码演示),需要构建一个主菜单(vector),其中包含每个子类的一个实例。我们的目标是维护一个菜单,其中列出了每一个演示以最少的工作量 最初在核心应用程序中,我创建了一个函数,返回一个向量,其中包含每个演示的一个实例,其中每个演示都需要一个push_back,每个新演示都需要通过添加另一个push_back来修改应用程序。为了避免每次需要添加新的演示以添加到列表时更改应用程序的源代码,我将所有演示放在一个单独的DLL中,并在D

我有一个基类cdemnstration和多个子类(每个实现运行不同的编码演示),需要构建一个主菜单(vector),其中包含每个子类的一个实例。我们的目标是维护一个菜单,其中列出了每一个演示以最少的工作量

最初在核心应用程序中,我创建了一个函数,返回一个向量,其中包含每个演示的一个实例,其中每个演示都需要一个push_back,每个新演示都需要通过添加另一个push_back来修改应用程序。为了避免每次需要添加新的演示以添加到列表时更改应用程序的源代码,我将所有演示放在一个单独的DLL中,并在DLL中创建了相同的向量返回函数,以便可以从核心应用程序调用它。然而,与建立/维护该演示列表相关的工作只是被推到了其他地方

我想执行以下操作之一:

  • 循环遍历CDemonstration类型的DLL中的每个类,使用其默认构造函数对其进行初始化,并将其添加到向量中
  • 向基类添加一个静态虚常量工厂函数,在每个子类中实现它,然后循环遍历这些工厂函数中的每个,以获得要添加到向量的实例

这听起来很像反射,甚至在一般C++中都不合适,但是如果他们在演示中添加了新的演示,那么就很好了。


谢谢

如果每个派生类都位于单独的DLL中,则可以:

  • 使用文件系统API在特定文件夹中创建DLL列表
  • 加载每个菜单对象并调用一个API,该API返回特定菜单对象的句柄
  • 使用基类指针类型添加对象(只需确保将任何特定行为实现为虚拟方法)

  • 好主意!如果每个DLL包含一个具有相同名称和签名的工厂函数,那么我可以加载DLL文件夹以获得一组菜单选项。我看到的一个问题是,我可能会有数百个演示,每个演示创建一个新项目是一个很大的开销(抱歉,编辑)。好主意!如果每个DLL都包含一个工厂函数,并且每个DLL的工厂函数与其他DLL的工厂函数共享相同的名称和签名,那么我可以加载DLL文件夹以获得一组菜单选项。我遇到的一个问题是,我剩下的是多个工厂函数分别初始化一个类,而不是一个工厂函数初始化所有类,再加上每个项目的开销。正如您所说,无论我将它们全部放在同一个DLL中,还是将它们拆分到多个DLL中,每个DLL都需要一个API函数,该函数用于注册该DLL中包含的每个具体实现。如果没有反射或大量原始DLL挖掘,我不相信有一种方法可以“调用从基类X派生的所有类的静态工厂方法”。