ctkPluginFramework使用

一、概述

  1. CTK的官网:http://www.commontk.org/index.php/Main_Page
  2. CTK源码下载地址:https://github.com/commontk/CTK
  3. ctkPluginFramework编译
    ctkPluginFramwwork编译
    调试CtkPluginFramework源码
    ctkPluginFramework编译(qt5.12_vs2017_gcc4.8)
  4. 某渲染客户端的框架结构
    1> CTKPlugin插件系统框架。负责整个项目的架构,决定了项目采用插件形式开发维护。
    2> Google protocol buffer。负责定义项目的通信协议,它是google内部使用的协议架构,最大的优点是:实现高效,向下兼容的通信协议。
    3> Zeromq框架:负责项目中的网络通信,用于高性能网络编程。
    4> 日志系统。负责项目中所有日志的输出

二、主程序开发

ctk简明教程
ctk完整教程
创建CTK跨平台插件工程

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#ifdef __MINGW32__
    // 使用mingw编译器时的定义
    QString static firstPlugin_filePath = "E:/lwks/build-ctk-plugin-first-Desktop_Qt_5_12_3_MinGW_64_bit-Debug/debug/ctk-plugin-first.dll";
#else
    // 使用msvc编译器时的定义
    QString static firstPlugin_filePath = "E:/lwks/build-ctk-plugin-first-Desktop_Qt_5_12_3_MSVC2017_64bit-Debug/debug/ctk-plugin-first.dll";
#endif

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    ctkPluginFrameworkFactory frameworkFactory;
    QSharedPointer<ctkPluginFramework> framework = frameworkFactory.getFramework();

    // 初始化并启动插件框架
    try {
        framework->init();
        framework->start();
        qDebug() << "CTK plugin framework start...";
    } catch (const ctkPluginException &e) {
        qDebug() << "CTK plugin framework init err: " << e.what();
        return -1;
    }

    // 获取插件服务的contex
    ctkPluginContext* pluginContext = framework->getPluginContext();
    try {
        // 安装插件
        QSharedPointer<ctkPlugin> plugin = pluginContext->installPlugin(QUrl::fromLocalFile(firstPlugin_filePath));
        qDebug() << QString("Plugin[%1_%2] installed...").arg(plugin->getSymbolicName()).arg(plugin->getVersion().toString());
        // 启动插件
        plugin->start(ctkPlugin::START_TRANSIENT);
        qDebug() << "Plugin start...";
    } catch (const ctkPluginException &e) {
        qDebug() << QString("Failed install or run plugin: ") << e.what();
        return -2;
    }

    return a.exec();
}

三、插件的开发

ctkPlugin插件简单开发
1、Activator.h

#include 
class Activator:public QObject, public ctkPluginActivator
{
    Q_OBJECT
    Q_INTERFACES(ctkPluginActivator)
    Q_PLUGIN_METADATA(IID "plugName")
public:
    explicit Activator(QObject *parent=0);
    ~Activator();
    void start(ctkPluginContext *context);
    void stop(ctkPluginContext *context);
}

2、Activator.cpp

#include "Activator.h"
Activator::Activator(QObject *parent):QObject(parent)
{
    this->setObjectName("plugName");
    
}
Activator::~Activator()
{
}
void Activator::start(ctkPluginContext *context)
{
}
void Activator::stop(ctkPluginContext *context)
{
}

你可能感兴趣的:(笔记,qt,c++,开发语言)