前面所讲的基于输出函数的插件化,可以实现简单案例的插件化,但一旦需要实现的功能过多,那么主程序就需要跟插件约定大量的函数,不便于函数的管理。因此,自然联想到类的特性,多态,继承,封装。基于类的插件化可以对大量的约定函数进行管理,而主程序只需要跟插件约定一个创建类的对象函数即可,其他功能让类对象去实现即可。
还是以做衣服的案例来写一个demo。
实现步骤:
- 约定接口类,里面只包含纯虚函数
- 插件继承接口类,并实现父类中的虚函数
- 约定创建类对象的函数CreateObj().,以父类指针接收,在DLL加载完以后立即调用
- 约定获取样式的函数GetStyleName(),创建完对象后立即调用
- 保存样式-DLL句柄,样式-类对象指针两个map
- 根据指定样式获取对应的对象指针,并按顺序调用功能函数
- 释放dll资源
主程序实现代码:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <Windows.h>
#include <fstream>
#include <iterator>
#include <string>
#include <map>
#include "BaseClass.h"
#define MAX_PATH 1024
void findFiles(char* lpPath,std::vector<const std::string> &fileList)
{