ctkPlugin框架启动崩溃

                                                                                                 ctkPlugin框架启动崩溃

0.问题

调试时:遇到下面这句代码崩溃

ctkPluginFrameworkLauncher::start("org.commontk.eventadmin");

1. 准备

确保你的工程中有  

(1)CTKCore.dll                                   必须

(2)CTKPluginFramework.dll              必须

如果要使用ctkPlugin事件通信,下面的(3)(4)(5)(6)必须要有

(3)liborg_commontk_configadmin.dll       可选

(4)liborg_commontk_eventadmin.dll       可选

(5)liborg_commontk_log.dll                     可选

(6)liborg_commontk_metatype.dll           可选

如果这些都没问题,但还是会崩溃,那么还有最后一招,

就是,在你的工程下面有个生成路径下面的“configuration” 这个文件夹,把这个configuration文件夹删除,重新编译运行,ok

int Engine::init()
{

	//获取插件所在位置
	QString pluginPath = QDir::currentPath();
	int pos = pluginPath.lastIndexOf("/");
	pluginPath = pluginPath.left(pos);

	int pos2 = pluginPath.lastIndexOf("/");
	pluginPath = pluginPath.left(pos2);
	pluginPath += "/Output/Bin/debug";

	// 在插件的搜索路径列表中添加一条路径
	ctkPluginFrameworkLauncher::addSearchPath(pluginPath);

	// 设置并启动 CTK 插件框架
	ctkPluginFrameworkLauncher::start("org.commontk.eventadmin");

	// 获取插件上下文
	ctkPluginContext* context = ctkPluginFrameworkLauncher::getPluginContext();

	//ctkPluginFrameworkFactory frameworkFactory;
	frameworkFactory_ = new ctkPluginFrameworkFactory;
	QSharedPointer<ctkPluginFramework> framework = frameworkFactory_->getFramework();
	// 初始化并启动插件框架
	try {
		framework->init();
		framework->start();
		qDebug() << "CTK plugin framework start...";

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
使用 ctkpluginframework 插件系统构建项目,可以将应用程序拆分成多个独立的插件,每个插件可以独立编译、打包和部署。这种方可以提高应用程序的可维护性和可扩展性,使得不同的开发人员可以独立进行开发和测试。 下面是一个使用 ctkpluginframework 插件系统构建项目的实战示例: 1. 创建一个主应用程序 首先,我们需要创建一个主应用程序,它将作为整个应用程序的入口点。可以使用 Qt Creator 创建一个新的 Qt 应用程序项目。在创建项目时,选择“Qt Widgets Application”,并勾选“Create Main Window”选项。 2. 集成 ctkpluginframework 库 在 Qt Creator 中,打开项目的 .pro 文件,并添加下面这行代码: ``` LIBS += -lctkPluginFramework ``` 这将链接 ctkpluginframework 库到项目中。 3. 创建插件接口 在项目中创建一个新的接口类,例如: ```cpp class MyPluginInterface { public: virtual ~MyPluginInterface() {} virtual void doSomething() = 0; }; ``` 这个接口将定义所有插件需要实现的方法。 4. 创建插件 创建一个新的 Qt 应用程序项目,并选择“Library”类型。在创建项目时,勾选“Export as a library”选项。 在项目中实现 MyPluginInterface 接口: ```cpp #include "myplugininterface.h" class MyPlugin : public QObject, public MyPluginInterface { Q_OBJECT Q_INTERFACES(MyPluginInterface) public: void doSomething() override; }; void MyPlugin::doSomething() { // 实现具体的插件逻辑 } ``` 5. 注册插件 在主应用程序中,使用 ctkPluginFramework API 注册插件: ```cpp #include <ctkPluginFramework.h> #include "myplugininterface.h" Q_IMPORT_PLUGIN(MyPlugin) QList<MyPluginInterface*> plugins; ctkPluginContext* context = ctkPluginFrameworkFactory::getFramework()->getPluginContext(); QList<ctkServiceReference> refs = context->getServiceReferences<MyPluginInterface>(); foreach (ctkServiceReference ref, refs) { plugins.append(qobject_cast<MyPluginInterface*>(context->getService(ref))); } ``` 这将获取所有实现 MyPluginInterface 接口的插件,并将它们添加到 plugins 列表中。 6. 加载插件 在应用程序启动时,使用 ctkPluginFramework API 加载插件: ```cpp ctkPluginFrameworkFactory factory; ctkPluginFramework* framework = factory.newFramework(); framework->init(); framework->start(); context = framework->getPluginContext(); QStringList pluginPaths; pluginPaths << "path/to/MyPlugin.dll"; foreach (QString pluginPath, pluginPaths) { QSharedPointer<ctkPlugin> plugin = context->installPlugin(QUrl::fromLocalFile(pluginPath)); plugin->start(); } ``` 这将加载 MyPlugin.dll 插件,并启动它。 7. 使用插件 在主应用程序中,可以使用插件提供的功能: ```cpp foreach (MyPluginInterface* plugin, plugins) { plugin->doSomething(); } ``` 这将调用所有已加载插件的 doSomething 方法。 以上就是使用 ctkpluginframework 插件系统构建项目的实战示例。需要注意的是,这只是一个简单的示例,实际应用中可能需要更多的代码来处理插件的生命周期、依赖项解析等问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值