Poco中插件的使用范例

插件是一种遵循一定规范的应用程序接口编写出来的程序,主要是用来扩展软件功能。很多软件都有插件,插件有无数种。例如在IE中,安装相关的插件后,Web浏览器能够直接调用插件程序,用于处理特定类型的文件。

1 创建dll插件工程

TestPlugin.h

#pragma once
#include "Poco/Foundation.h"
class TestPlugin
{
public:
	TestPlugin(void);
	virtual ~TestPlugin(void);
	virtual std::string name() const=0;
};

TestPlugin.cpp

#include "TestPlugin.h"

TestPlugin::TestPlugin(void)
{
}

TestPlugin::~TestPlugin(void)
{
}

TestLibrary.cpp

#include "TestPlugin.h"
#include "Poco/ClassLibrary.h"
#include <iostream>

extern "C" int POCO_LIBRARY_API gimmeFive();

class PluginA:public TestPlugin
{
public:
	PluginA()
	{

	}
	~PluginA()
	{

	}
	std::string name()const
	{
		return "PluginA";
	}
};

class PluginB:public TestPlugin
{
public:
	PluginB(){}
	~PluginB(){}
	std::string name()const
	{
		return "PluginB";
	}
};

class PluginC:public TestPlugin
{
public:
	PluginC(){}
	~PluginC(){}
	std::string name()const
	{
		return "PluginC";
	}

};

POCO_BEGIN_MANIFEST(TestPlugin)
	POCO_EXPORT_CLASS(PluginA)
	POCO_EXPORT_CLASS(PluginB)
	POCO_EXPORT_SINGLETON(PluginC)
POCO_END_MANIFEST

void pocoInitializeLibrary()
{
	std::cout<<"TestLibrary initializing"<<std::endl;
}

void pocoUninitializeLibrary()
{
	std::cout<<"TestLibrary uninitializing"<<std::endl;
}

int gimmeFive()
{
	return 5;
}


2测试插件

#include "CppUnit/TestCase.h"
#include "Poco/ClassLoader.h"

#include "TestPlugin.h"
#include <string>
#include <iostream>

using Poco::ClassLoader;

int main()
{
	ClassLoader<TestPlugin> cl;
	std::string path="TestLibrary.dll";
	cl.loadLibrary(path);

	TestPlugin* pPluginA=cl.classFor("PluginA").create();
	std::cout<<pPluginA->name()<<std::endl;
	delete pPluginA;

	TestPlugin* pPluginB=cl.classFor("PluginB").create();
	std::cout<<pPluginB->name()<<std::endl;
	delete pPluginB;

	TestPlugin& pluginC=cl.instance("PluginC");
	std::cout<<pluginC.name()<<std::endl;

	
	cl.unloadLibrary(path);

	return 0;
}

应用效果




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值