// PluginInterface.h
#pragma once
class PluginInterface {
public:
virtual void performAction() = 0;
virtual ~PluginInterface() {}
};
// 函数指针类型定义,用于获取插件工厂函数
typedef PluginInterface* (*CreatePluginFunction)();
// 函数指针类型定义,用于释放插件
typedef void (*ReleasePluginFunction)(PluginInterface*);
// Plugin1.cpp
#include "PluginInterface.h"
#include <iostream>
class Plugin1 : public PluginInterface {
public:
virtual void performAction() override {
std::cout << "Plugin1 performing action." << std::endl;
}
};
// 导出插件工厂函数
extern "C" __declspec(dllexport) PluginInterface* CreatePlugin() {
return new Plugin1();
}
// 导出释放插件的函数
extern "C" __declspec(dllexport) void ReleasePlugin(PluginInterface* plugin) {
delete plugin;
}
// PluginLoader.h
#pragma once
#include "PluginInterface.h"
#include <vector>
class PluginLoader {
public:
static std::vector<PluginInterface*> loadPlugins();
};
// Main.cpp
#include "PluginLoader.h"
#include <iostream>
int main() {
// Load plugins
std::vector<PluginInterface*> plugins = PluginLoader::loadPlugins();
// Perform actions from loaded plugins
for (auto plugin : plugins) {
plugin->performAction();
}
// Clean up
for (auto plugin : plugins) {
// 通过释放函数释放插件
ReleasePluginFunction releasePlugin = (ReleasePluginFunction)GetProcAddress(GetModuleHandle(L"Plugin1.dll"), "ReleasePlugin");
if (releasePlugin) {
releasePlugin(plugin);
} else {
std::cerr << "Failed to get ReleasePlugin function." << std::endl;
}
}
return 0;
}