用ctk加載插件有兩種方法,第一種需要自己創建ctkPluginFramework:
//ctk plugin ctkPluginFrameworkFactory* ctkFrameWorkFactory = new ctkPluginFrameworkFactory; QSharedPointer<ctkPluginFramework> framework = ctkFrameWorkFactory->getFramework(); try { framework->init(); framework->start(); qDebug() << "[Info] ctkPluginFramework start ..."; } catch (const ctkPluginException &Exception) { qDebug() << QObject::tr("Failed to initialize the plug-in framework: ") << Exception.what(); return 1; } //install plugin ctkPluginContext* pluginContext = framework->getPluginContext(); QSharedPointer<ctkPlugin> Plugin = pluginContext->installPlugin(QUrl::fromLocalFile("。。/liborg_ctk_example.dll")); Plugin->start(ctkPlugin::START_TRANSIENT);還有一種比較簡單的利用ctkPluginFrameworkLauncher
ctkPluginFrameworkLauncher::addSearchPath(path, true); //添加插件的搜索路徑 bool SUCCEEDED; try { SUCCEEDED = ctkPluginFrameworkLauncher::start(pluginSymbolicName); //pluginSybolName為插件的符號名,比如在MF文件中的 Plugin-SymbolicName: org.ctk.example,這里就是“org.ctk.example” } catch (ctkPluginException &e) { std::cout << "Error in " << pluginSymbolicName << " " << e.message().toStdString() << std::endl; const ctkException* e2 = e.cause(); if (e2) std::cout << e2->message().toStdString() << std::endl; return LOAD_FAILED; } catch (ctkRuntimeException &e) { std::cout << "Error in " << pluginSymbolicName << " " << e.what() << std::endl; const ctkException* e2 = e.cause(); if (e2) std::cout << e2->message().toStdString() << std::endl; return LOAD_FAILED; } catch (...) { std::cout << "Error in " << pluginSymbolicName << std::endl; return UNKNOW_EXCEPTION; } 獲取pluginContext用下面方法 ctkPluginFrameworkLauncher::getPluginContext()
新聞熱點
疑難解答