CTK如何实现运行时插件加载 40C

在我使用CTK框架进行插件编写时,对插件的加载出现了这个疑问,本人测试内容和结果如下:
在编写好了调用插件的简单程序后,制作好dll插件,程序提供了一个按钮,这个按钮的作用是重新读取插件目录,加载并start新插件:
1.在程序启动时不添加插件,在启动后添加插件到目录,点击按钮,插件识别成功,启动失败,出现ctkRuntimeException
2.在1的基础上,关闭程序,再次点击exe执行程序(没有重新编译,只是关闭程序再次打开程序),插件识别成功,插件启动并调用成功
因此,想要询问ctk如何才能在运行时直接启用加入的插件,而不是需要重启软件

1个回答

qq_32215819
风中飘零的bug 如果这个能解决问题的话,就不会来问了,网上已有资料,包括ctk官方文档,基本都看过了
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ctk加载插件
用ctk加载插件有两种方法,第一种需要自己创建ctkPluginFramework: //ctk plugin ctkPluginFrameworkFactory* ctkFrameWorkFactory = new ctkPluginFrameworkFactory; QSharedPointer framework = ctkFrameWorkFactory->getFram
ctk框架搭建(一) ctk框架插件加载与项目结构
序 使用CTK框架开发有大半年了,就实际应用上来说框架还比较可靠,但网上资料很少。而刚接触时项目已经有了相当大的体量,与业务等其他逻辑混淆,现在单独把ctk框架部分抽离出来做个总结分享,避免后来的人走弯路。 该系列介绍简单的ctk框架构建的方法,具体架构可根据自身项目设计,开发环境为macOS High Sierra,QtCreator 5.10.0。ctk框架插件     CTK源码可以从Gi...
在ubuntu14.04LTS下编译CTK插件
在ubuntu14.04LTS下编译CTK插件 使用cmake进行编译,首先需要安装cmake。 Ubuntu14.04 LTS安装cmake 参考:http://blog.csdn.net/wz3118103/article/details/39826397 cmake版本:CMake-3.0.2     tar-zxvf CMake-3.0.2.tar.gz     cdCMak
ctk框架搭建(四) ctk插件间通信(事件监听)
     ctk框架中的事件监听,即观察者模式流程上是这样:接收者注册监听事件->发送者发送事件->接收者接收到事件并响应;相比调用插件接口,监听事件插件间依赖关系更弱,不用指定事件的接收方和发送方是谁。    要使用ctk框架的事件服务,准备工作应该从cmake开始,编译出支持事件监听的动态库,Mac下的名称为liborg_commontk_eventadmin.dylib。本章要完...
ctk插件开发框架
CTK用于C++的动态组件系统,以OSGi规范为模型。 它支持一种开发模型,其中应用程序(遵循面向服务的方法)由许多不同(可重用)组件(动态)组成。
ctk插件简单使用
简单的ctk应用,没有其他功能只是ctk插件的核心功能和ctk框架
ctk插件框架的使用
#include #include #include #include #include #include #include #include #include "ctkPluginContext.h" #include "ctkPluginFramework.h" #include "ctkPluginFrameworkFactory.h" #include
ctk框架搭建(五) 插件自动加载与插件依赖
     前面几章实现了一个很简单的项目结构:控制台生成主窗体,窗体点击弹出一个用户界面。姑且厚着脸皮谈一下框架优化,假设这个项目有N个用户,假设N接近无穷,每次增加用户都要对主窗体进行改动是不友好的;假设我们还要对某些用户进行删除,从代码里,逐一排查插件代码容易发生遗漏。架构中经常使用的方法就是自动加载,本章介绍怎么将原来的项目用自动化方式加载插件。插件自动加载    本项目所有生成插件都在pl...
ctk框架搭建(二) ctk插件的接口处理及启用
ctk框架由一个一个可分离的插件组成,框架对插件识别有一定要求,目前网上很多一整块扔出来对新人不太友好,博主这里讲解是尽量拆。单个插件最基本的格式要求分成Activator,qrc文件,以及MANIFEST.MF,我们以生成一个主界面模块MainWindow为例。Activator    右键项目选择新建子项目-其他项目-Empty qmake Project,项目名称为MainWindow,pr...
ctk框架搭建(三) ctk插件间通信(注册接口调用)
 ctk框架插件化开发实现功能的隔离,插件通信需要参照固定标准,这里介绍两种插件间通信的方法。(第三种是啥我也不知道……)还是以上章的MainWindow为例,主程序中以接口调用的方法弹出插件中的界面。由于涉及到Qt的Widget界面,请先将main函数中的QCoreApplication改为QApplication。函数接口 上章我们已经编译出需要的动态库,首先确定我们需要插件向外部暴露的功能有...
DataX 运行时加载自定义 transformer 插件
如何让 DataX 运行时加载自定义 transformer 插件 早该知道的一种更高级的 transformer 自定义方法。 前言 之前的文章有介绍过通过自定义 transformer 在 DataX 上实现 ETL(Extract Transform Load) 过程中定制化的数据处理,当时的实现方法是自定义插件并手写代码注册到com/alibaba/datax/core/transport...
基于ctk框架的插件的基本格式
test_i.h #include class MyTest : public QObject { Q_OBJECT public: virtual void test() = 0; }; Q_DECLARE_INTERFACE(MyTest, "mytest")   test.h #include "test_i.h" class M
CTK框架使用
基于Qt的CTK框架的使用QT的plugin插件的创建方式在介绍CTK框架的使用方法之前我们首先介绍一下QT的plugin插件的创建方式。QT提供两种API来创建插件: 扩展Qt库本身的高级API。例如:定制database drivers, image formats, text codecs, custom styles, etc. 扩展应用程序的低级API 如果你像创建一个可以在Qt Des
CTK环境搭建
CTK环境搭建 1 下载相关文件 下载Cmake:https://cmake.org/ 下载ctk源码:https://github.com/commontk/CTK 2 编译CTK 2.1 cmake打开cmakelist ctk源码下载完之后在当前文件夹下新建build目录。如图 2.2 qt环境版本确认 使用cmake开进入CTK-Master目录,选择源代码目录和Build目录。 进行...
Qt5下通过CMake创建CTK插件的步骤
这两天一直在看CTK插件的用法,网上资料实在太少,只能通过已有的一些开源工程摸索,过程中遇到很多问题,都是些细节方面的东西,把过程记录下来,方便以后查阅。 网上有通过pro文件创建插件的教程,这里只介绍通过CMakeList配置插件的方法。 首先新建一个插件类PluginLoader(名字可以随意起) #include #include class ServiceOne; clas
如何加载谷歌浏览器的插件
插件安装失败,绝大部分原因如下: 插件未经过Chrome商店审核,安装后,Chrome会提示“此扩展程序可能已损坏”,其实就是安装失败。 从Chrome 73版本开始,谷歌修改了插件策略,导致插件伴侣失效,作者正全力解决该问题,在此之前,可参照下方提示,使用开发者模式安装任何插件! 解决办法: 任何原因导致的安装失败,均可使用Chrome开发者模式,成功安装插件,这是大杀器。
编译CTK
(错误一) CMake提示错误为: 转换到 COFF 期间失败: 文件无效或损坏 应该是 .net Framework升级后,使得cvtres.exe版本不一致导致该错误。 解决方法: 查找是否有两个cvtres.exe。 一个是VS安装目录:C:\Program Files(x86)\Microsoft Visual Studio 10.0\vc\bin\c
APK插件加载资源实现
前言 插件化编程现在非常的火热,通常用来解决65536问题,插件通常被做成不同的apk模块,每个模块专门负责某种业务逻辑,主APK通过调用动态加载插件里的代码和资源实现宿主和插件的交互。为了了解插件APK文件如何使用,这里通过读取APK插件的资源来实现换肤功能。 实现效果 生成资源插件 只要在Android Studio中创建一个新的项目,项目里不需要有任何的Activity组件,...
openresty实现网关插件加载
API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。
编译时、加载时、运行时
大家讨论一下这三个时,发生哪些主要的事件?rn对c/c++程序
Flex运行时加载ICON
[code="java"] import com.benstucki.utilities.IconUtility; import mx.controls.Button; import mx.controls.ButtonBar; import mx.events.ChildExistenceChangedEvent; public function chi...
运行时 加载指定目录的dll
应用程序需要依赖一个dllrn是通过rn#include "..\skint.h"rn#pragma comment(lib, "skint.lib")rn这种静态方式 链接rn现在问题是, 运行时 这个dll不能和exe放一起,要放到一个指定的目录,请问怎么做?rnrn如果是动态加载 rnint APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine, int nCmdShow)rnrn ::LoadLibrary(_T("skint.DLL"));rn 刚开始的时候 我这样加载,但是 提示找不到skint.dll 程序根本运行不起来。rn
PHP运行时代码加载
有一个php cli程序要跑很长时间,现在的问题是想在程序跑的时候更新代码,并继续运行。不知道PHP有没有这种运行时加载的功能。
linux 动态库运行时加载
动态加载 覆盖旧库 动态加载 覆盖旧库 一个程序mybin 运行时加载了 a.so, 如果 直接cp 新a.so 覆盖a.so 会导致mybin crash 因为: TODO 正确做法: install 新a.so a.so...
Swift3.0--运行时加载属性列表
import UIKit class Person: NSObject { var name: String?; var age: Int = 0; var title: String?; //private,在运行时同样获取不到属性,(可以获取到ivar),同样会让KVC崩溃 // private var title: String?;
Flex运行时加载皮肤
Flex实时加载皮肤很有用,但是唯一的问题就是,在加载皮肤的过程中,用户等待的问题。如果皮 肤文件比较大,没有加载上来之前,程序可以说是无反应的,这样需要我们以某种方 式提醒用户当前程序的工作。
运行时加载DLL
使用DLL有两种方法,一种是启动时加载DLL,另一种就是运行时加载DLL,之前的一篇博文用的就是启动时加载DLL,现在来看看运行时是如何加载DLL的 还是之前的那个项目,只不过添加了两个函数(W版本的和A版本的) 这是源文件.cpp# include<Windows.h> # include"标头.h"//Dll入口函数就是DllMain,DllMain既是入口点,也是出口点 int WINAP
作为插件如何加载资源文件
我自己不是用JAVA的,所以只有来这里速成了rn我要给一个程序做个插件,这个程序是有源码的,我在他源码下新建了我的包test,并在里面放了一个xxx.xml,请问我要怎么访问这个xxx.xml?用class.getResource("")得到的是bin目录,而我的插件最终是要用他的工具做成jar放到plugin文件夹的,试过getResourceAsStream("xxx.xml")获取的也是nullrnrn不要让我把x:/xxx/bin修改成x:/xxx/plugin啊。。因为我参考别的插件源码是可以直接访问src/别人的插件/xxx.png之类的,在其源码下放一个png,就能使用,但这只是编译时,发布要靠这个程序提供了一套python脚本最终帮你编译成jar来发布
JSP如何加载OCX插件
我有一个C++开发的插件,想让JSP在网页上加载,怎么处理?
CTK,CTKData,CMake3.91
学习CTK框架的一些必要材料,所有的需要的框架代码和数据,以及编译框架所需要的CMake工具,免去到处下载的麻烦
CTK编译库文件
CTK编译结果,使用vs2017 64bit编译,其中debug版本我已经生成带d后缀的,release版本不带d后缀。可以把两个版本的文件放在同一个目下使用
程序运行时,如何重新加载My.Settings.ConnectionString()?
程序运行时,如何重新加载My.Settings.ConnectionString()?rn程序中有函数动态修改 程序.exe.config配置文件的ConnectionString,rnrn每次修改后不能及时生效,如果才能重新加载?rnrn谢谢!rnrn最后88分
插件加载
2,插件加载 插件加载调用的是PluginManager的loadPlugin方法,该方法主要逻辑如下, 1,利用LoadedPlugin来解析和加载插件 LoadedPlugin plugin = LoadedPlugin.create(this, this.mContext, apk); 2,将插件的包名和LoadedPlugin对象放入哈希表mPlugins中, this.mPlu
Vs2015下编译CTK框架
2019年2月来的猝不及防,一年一年过得真快,留不住时光,只能通过自己的书写留下残存的记忆。以前没有感觉,年龄越大,越感觉记录的重要性。 在C++的开发道路上已经走了有段时间,最近才感觉自己掌握的太少。开发个简单的客户端什么的,真的没什么技术含量。但是自己又深入不下去。希望来年能多看几个开源的代码,ReView自己以前老的代码。不要以为冰山只有水面上的那么大,潜入水中,才能窥得全貌。这里开年第一...
ctk编译 极简版
环境: 系统:vmware装了个win7 64位; cmake:attachment; filename=cmake-3.13.1-win64-x64; qt:qt-opensource-windows-x86-msvc2010_opengl-5.4.2(同时将qmake.exe的路径添加到环境变量里去) vs:2010 git:用来下ctk源码的就不细说了 ctk路径:看下图 ...
CTK Plugin Framework实例
CTK Plugin Framework实例详细展现了CTK Plugin Framework的创建和使用过程。
安装CTK过程报错解决
报错:/usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake:26: error: Could not find a package configuration file provided by &quot;Qt5XmlPatterns&quot; with any of the following names: Qt5XmlPatternsConfig.cmake q...
CTK基于VTK插件使用
1.把CTK的相关dll复制到qt的bin目录下 2.把CTK的VTK插件复制到qt designer目录下,在qt designer中就可以ctk 的插件了 3.建立一个qt gui程序,修改项目属性 添加CTK和VTK的DLL路径,由于我们把CTK的dll复制到了QT目录下,这里会自动加载 添加CTK和VTK的头文件目录 添加CTK和VTK的lib路径,注意,...
CTK通用插件使用
1.把release版本和debug版本的CTK库文件拷贝到QT的bin目录下 2.把release版本下的CTKWidgetsPlugins拷贝到qt plugins目录下 Qt designer中就可以看到集成的CTK通用插件了 3.建立一个qt gui程序,设置ctk的链接目录 设置CTK的dll目录 设置CTK的头文件目录 设置CTK的lib路径 4....
如何实现运行时更新类文件?
为了实现与应用服务器热部署类似的功能,我想写一个自定义的ClassLoader能定时扫描指定目录中的类的更新,如果有更新则装载新的类信息.但ClassLoader没有提供重新装载的方法,所以我在每次类文件更新后,就new 一个自定义的ClassLoader的实例,可以达到上述目的,但new 一个自定义的ClassLoader的实例后,它会重新装载其它未更新的类,这就带来一个效率问题.请问如何解决该问题? rnrn自定议ClassLoader的源代码: rnpackage com.sily.api.classloader; rnrnimport java.io.*; rnrn/** rn* rn* Title: 类加载器 rn* Description: 从指定的目录中加载类的一个类加载器.该类加载器覆盖了loadClass方法 rn* Copyright: Copyright (c) 2004 rn* Company: rn* @author sylilzy rn* @version 1.0 rn*/ rnpublic class DirClassLoader rnextends ClassLoader rn/** rn* 类加载器的核心代码 -从指定的目录中加载类。 rn* @param name String rn* @param resolve boolean rn* @throws ClassNotFoundException rn* @return Class rn*/ rnrnpublic Class loadClass(String name, boolean resolve) throws rnClassNotFoundException rn//我们的目的是获得一个类对象。 rnClass clas = null; rn// 首先,检查是否已经出理过这个类。 rnclas = findLoadedClass(name); rnif(clas!=null) rnSystem.out.println("finded Class: " + clas); rn//return clas; rn rn// 通过类名获得路径名 比如:java.lang.Object => java/lang/Object rnString fileStub = name.replace(´.´, ´/´); rn// 构建指向类文件的对象。 rnString classFilename = "myClasses/" + fileStub + ".class"; rnFile classFile = new File(classFilename); rnif (classFile.exists()) rnrn// 我们开始加载原始字节。 rntry rn// 读取字节。 rnbyte raw[] = getBytes(classFilename); rn// 转化为类对象 rnSystem.out.println("load " + name + " from DirClassLoader"); rnclas = defineClass(name, raw, 0, raw.length); rn rncatch (IOException ie) rn// 这里并不表示失败,可能我们处理的类在本地类库中,如java.lang.Object。 rn rn//System.out.println( "defineClass: "+clas ); rn//可能在类库中,以默认的方式加载。 rnif (clas == null) rnSystem.out.println("load " + name + " from SysClassLoader"); rnclas = findSystemClass(name); rn rn//System.out.println( "findSystemClass: "+clas ); rn// 如果参数resolve为true,根据需要解释类。 rnif (resolve && clas != null) rnresolveClass(clas); rn// 如果还没有获得类,说明出错了。 rnif (clas == null) rnthrow new ClassNotFoundException(name); rn// 否则,返回这个类对象。 rnreturn clas; rn rnrn/** rn* 指定一个文件名,从磁盘读取整个文件内容,返回字节数组。 rn* @param filename String rn* @throws IOException rn* @return byte[] rn*/ rnprivate byte[] getBytes(String filename) throws IOException rn// 获得文件大小。 rnFile file = new File(filename); rnlong len = file.length(); rn//创建一个数组刚好可以存放文件的内容。 rnbyte raw[] = new byte[ (int) len]; rn// 打开文件 rnFileInputStream fin = new FileInputStream(file); rn// 读取所有内容,如果没法读取,表示发生了一个错误。 rnint r = fin.read(raw); rnif (r != len) rnthrow new IOException("Can´t read all, " + r + " != " + len); rn// 别忘了关闭文件。 rnfin.close(); rn// 返回这个数组。 rnreturn raw; rn rnrn rnrnrn
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件