我对插件儿实现的理解-献给初学

Thonny-适合初学者的 Python IDE 今天来说说Python IDE,如果你是一位Python初学者,那最适合Thonny它了,如果不是初学者,请选择PyDev和Pycharm. 一、下载安装说明 适用于 Windows 适用于 Mac 适用于 Linux pip 安装 常问问题 最新的稳定版本链接在本页顶部的下载框中。旧版本和预发布可以在https://github.com/thonny/thonny/releases找到 二、初学者为什么适合选择它: 看下它的界面就知道,简直是清爽的不能再清爽了。 三、那它有那些特征: 1.易于上手 . 阅读详情

首先声明:我自己没有写过支持插件儿的程序.

插件儿通常情况下会以动态连接库的形式出现,不过它的后缀,其实不一定是DLL.如果大家对动态连接库有一些了解的话,就会想到,动态连接库的分静态调用和动态调用.

静态的调用,是我们在做DLL的时候提供一个LIB.在你的主程序中加如这个LIB就可以象使用普通函数一样使用动态连接库中的函数.

动态的调用,是指,我们使用LoadLibrary,载入你的动态连接库.然后用GetProcAddress找到指定函数的指针,当然你得事先定义一个同样的函数指针。然后就可以用这个函数了,用完了之后,就可以用FreeLibrary来释放动态连接库.

我们写插件,正是要用到动态加载这种技术。

通常我们看到的插件都是被放在一个或几个固定的目录.这是为什么呢,很明显,主程序必须能找到这些动态连接库,才可以加载.

而插件之所以叫插件,而且可以动态的增加,就是因为,主程序对插件的支持不是写死的.而是从特定的目录搜索.而且每个特定程序的插件,一般都有一定的规则,比如可以操作主程序的某些功能.实际上就是给了插件一个句柄.

每个插件都有固定的格式,比如都有某个函数.然后主程序只是用动态调用的方法来找这个函数,并执行它.

插件被动态的添加到主程序的某个菜单,其实就是在搜索插件的同时,将一个从插件里读出的字符串做为新添加的菜单项的CAPTION.而同时记录了这个菜单项将调用那个插件.

这个得到插件名字的过程就是,你事先规定在插件中有个函数叫getCaption或是什么的,然后你在载入动态连接库的同时调用这个函数,它返回一个串.在主程序里,你就可以用它了.

我现在说的都是理论,但我认为,基本是可以实现.因为我以后将会用这个方法写一些东西.如果有严重的理论错误,请大家指出来.

希望我说的这些能帮到大家而不是将大家带到沟里.

此篇是写打算学习插件编写的朋友的。你们可以从网上搜索 LoadLibrary,GetProcAddress,FreeLibrary,DLL的开发等关键字,找到自己想要的.代码例子.

初学Jenkins遇到的那些问题总结 初学一项技术的时候,没有高手的执导,难免会遇到一些不易理解的问题。这里总结一下初学Jenkins的时候遇到的那些问题,防止再次掉进去,不能解释原因的,直接绕过就好。 1.使用“java -jar jenkins.war”命令只有打开的网址应该是“http://localhost:8080/”,然后输入密码,创建自己的第一个用户。不要输成了“http://localhost:8080/jenkin... 阅读详情

相关推荐

VSCode实用插件集锦

VScode中一些实用插件的介绍和简单设置。

无人机开发(开源Ardupilot) 1万+

个人对插件和钩子的理解

看了很多文章,但对于插件和钩子的理解还是有点模糊。 谈谈我现在的看法:插件很好理解,就是对系统功能扩展模块。而系统中实现了扩展功能的抽象插件类。此时,如果开发者想要开发一个新功能,只需要继承抽象类,实现其必要的一些方法,加入一部分自己想要实现的功能(function)。这些功能比如说就是衣架吧,有各种不同类的衣架挂钩,比如挂帽子,上衣,裤子,鞋子等的。我们的函数function就有了不同实现方法

枝寒不栖 1033

深入理解插件系统

要开发一个成功的系统,插件是必经之路。

青春不老,奋斗不止! 1万+

学习插件技术原理后的一点认识

    插件的本质在于不修改程序主体(平台)的情况下对软件功能进行扩展与加强,当插件的接口公开后,任何公司或个人都可以制作自己的插件来解决一些操作上的不便或增加新的功能,也就是实现真正意义上的“即插即用”软件开发。平台+插件软件结构是将一个待开发的目标软件分为两部分,一部分为程序的主体或主框架,可定义为平台,另一部分为功能扩展或补充模块,可定义为插件。    在进行软件开发之前,是否采用平台+插件

stella_tangxing的专栏 1万+

hadoop插件儿winutil.exe和hadoop.dll

搭建hadoop环境需要下载的插件儿,分别将bin目录下和etc目录下的内容替换。

SAP WM模块事务码(TCODE)大全

OL07 Data transfer stor.bins LDK34->RLPLA 仓储位LDK34 ->RLPLA

matinal 當冬夜漸暖 。公众号:matinal 5846

【插件开发】—— 2 插件入门

  最近由于特殊需要,开始学习插件开发。 以前接触java也算有些时日,但是一直不知道有插件开发这样一种技术路径,本想着这开发工具都给你备好了,直接用不就行了。但是总有些IT工厂,为了要节约成本,开发自己的开发工具,但是又要节省时间,总不能一切都自己来。毕竟开发一个eclipse也要很长时间的。因此,插件开发出现在历史舞台。   首先要了解插件开发,就得从SWT/JFACE说起了。SW...

weixin_33709609的博客 751

excel wind插件使用_Python和wind的交互—在债券中的应用

个人认为学会了怎么用python和wind交互以及怎么用python处理Excel数据,就基本能替换日常很多琐碎的债券工作,还不用担心Excel某个值改变了导致整个报表都毁了。事实上在python调用wind函数和在Excel中调用函数一样简单,只要会基本的操作就够了。下面详细的介绍如何用python和wind进行交互。首先安装好python+pycharm+wind。因为python...

weixin_39863918的博客 5330

jQuery 入门:一份献给初学者的完全指南

jQuery是一个快速、小巧且功能丰富的 JavaScript 库。它的核心理念是(写得更少,做得更多)。定义:它是一个兼容多浏览器的 JavaScript 脚本库,极大地简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。核心作用:jQuery 将原生 JavaScript 中繁琐、复杂的 DOM 操作进行了优雅的封装,提供了一套简洁、链式的 API,让开发者能用更少的代码完成同样的功能。诞生背景。

m0_60311269的博客 1277

DC竞赛 国能日新功率预测题 rank21 解决方案(适合新手)

DataCastle国能日新光伏功率预测 数据异常处 本题在测试集中提供了时间、辐照度、风速、风向、温度、压强、湿度、实发辐照度8个特征,以及标签**实际功率**。 而在训练集中只有前七个特征,无实发辐照度。 策略 在观察了数据之后,我们确定实发辐照度是一个强力特征,于是我们采取了stacking的策略: 1. 第一次训练以实发辐照度为标签,预测 测试集的实发辐照度 2....

yyhhlancelot的博客 7294

文华指标源码—区间彩带

这就是当年东方财富软件终端里主打经典的指标、主要揭示主力成本区域。

qq2054129753的博客 888

Chrome 插件初学开发

这两天学习了chrome的插件开发,发现写插件是个很有意思的事情,可以很轻松的满足很多日常的小需求。提高工作效率。 下面简单分享下这两天写的两个插件以及背后的需求点。  <p style="text-align:center;"><img src="http://hi.youkuaiyun.com/attachment/201109/27/0_1317110330ll6F.gif" /></p>

Chrome 官方博客 1万+

RV1106G3的AOV下的yolov5调试记录

本文介绍了基于LuckFoxPicoMax开发板的RV1106芯片调试经验,重点包括AOV(Always-On Vision)和Yolov5目标检测的实现。在硬件方面,板载1TOPS NPU、256MB内存,并更换为SPI NOR存储。软件调试涉及MK配置文件修改、设备树调整(按键唤醒和sensor配置)以及程序自启动设置。Yolov5模型优化为320*320尺寸,推理时间约45ms。系统采用VI采图与AI识别通过共享内存通信的方案,实测功耗在20-35mA范围。文章还指出了当前存在的功耗优化、ISP调试等

fzktongyong的博客 1711

【Vue原理解析】之插件系统

Vue插件系统是Vue框架的一个重要特性,它使开发者能够轻松扩展Vue的能力与功能。本文介绍了Vue插件系统的原理,并结合实际示例和相关源码解析,帮助读者更好地理解和应用Vue插件。希望本文对您有所帮助,让您更加熟悉和掌握Vue插件系统的使用和原理。以上是一篇关于Vue插件系统的高质量文章示例,结合了Vue插件的使用示例和相关源码解析。您可以根据实际需要进行适当调整和扩展,以满足您的写作需求。希望这篇文章对您有所帮助!

俊刚的博客 1542

基于 STM32 的智能水表流量计设计与实现 —— 数据采集与远程传输

本文设计的基于 STM32 的智能水表流量计通过霍尔传感器实现流量采集,结合 STM32 的处理能力完成数据计算、存储与远程传输,具备计量精准、功耗低、可远程监控等特点。未来可优化方向:引入低功耗模式延长电池寿命,增加水质检测模块实现多参数监测,提升水务管理智能化水平。

weixin_42300449的博客 1028

timing window file中的S L T指什么意思

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 771

java计算器程序代码实现加减乘除_八个常见Java项目,献给初学编程的你!

如果你是正在学习Java的初学者,或者打算转行学习Java编程的小白,那么你一定会对Java能够做什么项目一定很感兴趣。一定希望对Java能够实现哪些东西有所了解。今天就为大家简单说一下一些可以用Java编程语言练手的项目。0.计算器可以用Java语言做一个手机上简单的计算器,可以做到加减乘除。而且这个功能很简单,几乎是很多学习Java编程的语言经常会去尝试的第一个小项目。虽然简单,可是能够做到也...

weixin_39662228的博客 1413

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【thinkphp3.2】插件开发实现

这两天写项目用到插件这块了 作为个新手不太了解 官方文档给的参考也不是很多 http://document.thinkphp.cn/manual_3_2.html#behavior_extend 看了几遍也不是很懂 想到oneThink就是插件机制 于是乎下载最新的oneThink...

chuomao6030的博客 397

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

计算器java代码_八个常见Java项目,献给初学编程的你!

如果你是正在学习Java的初学者,或者打算转行学习Java编程的小白,那么你一定会对Java能够做什么项目一定很感兴趣。一定希望对Java能够实现哪些东西有所了解。今天就为大家简单说一下一些可以用Java编程语言练手的项目。0.计算器可以用Java语言做一个手机上简单的计算器,可以做到加减乘除。而且这个功能很简单,几乎是很多学习Java编程的语言经常会去尝试的第一个小项目。虽然简单,可是能够做到也...

weixin_28040125的博客 491

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

React初学者手搓Chrome的Json Formatter插件

在之前的需求中接触到了React开发,开始学习后感觉可以实现相关功能的初步交付了,觉得自己可以了。之前使用的json format工具一直充斥着广告,实在受不了决定自己手搓一个

qq_43687253的博客 1089

让初学者理解Struts

让初学者理解Struts新手学习struts可以更加好的理解面向对象开发的方法、3层结构的优势、模型驱动等概念。Struts是一个不错的java框架,但是它包含的内容也相当多,对于初次接触它的人,特别是java新手,可能有很多不明白的地方。根据我自己的理解和实践,觉得struts还是相当容易上手,网上能找到很多例子。但是这些例子又讲的比较浅,没有涉及到实际项目的应用,比如如何连接数据库,如何实

我的专栏 1307

Notepad++ 初学者指南

通过上述设置和功能,Notepad++ 可以为初学者提供一个良好的编程环境。随着时间的推移,您可以根据自己的需求进一步定制 Notepad++,使其成为更适合您个人工作流程的强大工具。如果您有任何具体问题或需要进一步的帮助,请随时提问!

疯一样的码农 1459

ae抠像插件_【干货】AE初学者看完不走弯路

导语: 我工作使用AE比较多,属于横向拉开,涉及软件也比较广,在刚开始学习的时候也走过很多的弯路。现在回首觉得有人早点告诉我就好了。所以今天和大家讲讲处学AE需要知道那些知识,明白这些知识可以少走很多的弯路。一:AE的学习入门并不是特别复杂。最初级入门的核心问题就是 :关键帧与遮罩,图层叠加模式。无论你是系统学习还是去上培训班。这是最基础的一部分。使用几次就会上手了,理解起来并不难,和PS的图层概...

weixin_39822493的博客 1859

ae抠像插件_AE初学者看完不走弯路

导语: 我工作使用AE比较多,属于横向拉开,涉及软件也比较广,在刚开始学习的时候也走过很多的弯路。现在回首觉得有人早点告诉我就好了。所以今天和大家讲讲处学AE需要知道那些知识,明白这些知识可以少走很多的弯路。一:AE的学习入门并不是特别复杂。最初级入门的核心问题就是 :关键帧与遮罩,图层叠加模式。无论你是系统学习还是去上培训班。这是最基础的一部分。使用几次就会上手了,理解起来并不难,和PS的图层概...

weixin_39673704的博客 420
上一篇: 离开出生的地方,去别处漂流
下一篇: VC中Windows常用控件的创建和使用
vrix
博客等级 码龄24年 673粉丝 167原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值