安普 网络资讯 2022年10月1日
0 收藏 0 点赞 879 浏览 6139 个字
摘要 :

火山PC,DLL的编写和调用。那么在这节课当中呢,再给大家讲解使用火山PC来编写一个DLL,同时呢,我们还要编写另外一个程序来调用我们之前编写好的DLL。好,接下来呢,我……

火山PC,DLL的编写和调用

火山PC,DLL的编写和调用。那么在这节课当中呢,再给大家讲解使用火山PC来编写一个DLL,同时呢,我们还要编写另外一个程序来调用我们之前编写好的DLL。好,接下来呢,我们进入这一课的内容,首先我们先来看编写一个DLL程序。
输出一个D函数。
那么这里呢,就给大家说到两个属性啊,这两个就是属性,它不像我们之前看到的那些变量或者参数啊什么的,那么它呢,是以属性的形式出现的,那么属性出现在什么地方呢?下面呢,我们打开火山来看一下。
在这里呢,因为这一节课我们要同时编写两个这样的一个程序,所以说呢,我们要新建一个文件夹,来保存我们的课的内容。
好,我们先新建一个动态链接库,然后呢,我们就做叫做DLL,那么在这里呢,当我们创建项目之后,火山就会自动给我们创建好一些示例代码或者说模板代码,那这个时候呢,我们来看一下。
首先我们看到了属性名这个位置,大家看我鼠标这个位置,它有输出名和视窗点输出,那么这个呢,就是对应跟大家说到的这两个属性,我们看一下这两个属性应该怎么样的去使用,首先是视窗点输出。
那么它的作用是什么呢?它的作用是通知编译器,或者说通知火山,将该方法作为公开方法,允许在外部直接调用,那么这个外部呢,指的就不是这个类的内部或者外部了,它指的是这个DLL编写好之后,能再被外部调用啊,指的是这一个外部。所以说呢,我们要把视,呃,视窗点输出这个属性设置为帧,那么设置为帧之后呢,外部就可以看到这一个方法,那么也就可以进行调用了。
那么这个方法呢,是有要求的,我们来看一下,首先是公开,然后是静态,然后是通常,那么这三个呢,是硬性规定,我们一定要符合这三个要求,符合了之后呢,这个方法才会被认为是一个公开方法。
然后我们再来看输出名,输出名这个大家可以很好的理解,那么因为我们要将这个函数公开出去,向外部啊,让外部能看到我们这个函数,那么这个函数它一定有一个名字,那么这个名字呢,就是输出名是需要我们来指定的提供DLL中公开的方法的名字,那么大家用过DLL可能也都会知道,那么当你使用工具查看电压段路的时候呢,啊,总会有一些公开的方法,然后呢,它有这个名字列在那里,那么我们根据它不同的名字来调用它不同的一个方法。
那么这里呢,使用这个输出名啊,还有一个就是防止火山PC编译时会自动替换,因为火山呢,在编译的时候,会将原有的这个方法名进行一个处理,就处理之后呢,可能就不是我们之前认识的那个方法了,那么这里呢,写了输出名之后,他就不会再对这些方法,或者说再对这些名字进行一个特殊处理,而是原封不动的输出。好,那接下来呢,我们来实际上看一下这个方法的定义。
那么这个定这个方法在哪个类当中呢,都没有关系啊,都没有关系,在启动类中也行,或者我新建一个类也行,但是呢,它要满足几个条件,首先是公开,然后要有通常这个类别,然后是静态。
之后呢,再有输出名和视窗点输出,一共这么五个条件,那么当这五个条件都满足的时候,这个方法就会被认为是一个公开出去的啊,这样的一个方法。那么我们看一下输出名,那么这个输出名呢,就像D了啊,这样的一个动态链接库的输出名,那么我们可以随意的指定,那么这里呢,推荐大家使用英文进行输出,就是不要使用中文或者特殊符号,那这里呢,我可以叫MY。
Function啊一。
输出这里呢写针啊,这个是默认就会有针,所以呢,我们把针放在这里,那么在这里呢,给大家演示一个比较简单的,大家讲一讲之前的a加B对吧,我们来实现这样的一个a加B程序。
A加B,那就是两个加数相加,返回一个他们的结果。
好,那这个时候大家可能看到,诶,这样跟编写一个普通的方法没有什么区别,那么对的就是没有什么区别,那么DLL呢,只是将一些特殊的方啊,不能说是特殊吧,就是将某一类的方法,或者说有某些功能的方法集中的放在一起,然后呢,提供一个DLL出去,这样的话呢,所有用到这个功能的,就可以直接用这个DLL就可以了,而不用说啊又去啊找这个或者找那个,然后每个人又都自己封装一遍,那这个就非常的费事,所以说呢,有一个公用的像这种DLL呢,也是很方便的。再有呢,就是一些啊不想直接。
这种公开出来的,因为DLL编译之后呢,是一个二进制的可执行文件,那么分析它的这个难度就比较大了,所以说呢,有一些不想开源的,或者说不想让别人啊,猜透它是怎么用的,都可以使用DLL这样的一个方式来进行调用。
那这里呢,我们看到它的实现呢,实际上跟啊普通的方法是一模一样的,只是它有这五个限制的属性啊,当这五个属性满足的时候,就可以是一个导出的这样的一个命令,或者说是方法。
那么至于这个地方的方法名啊,实际上呢,已经没有多大关系了,因为当有输出名的时候,会优先以这个输出名为准,那么这里的方法名呢,也只是给我们在程序里面自己用的时候方便调用,那好比说我现在要测试一下这个方法,那我就可以在启动方法下面把我的输出方法写出来,那这个时候呢,我传递一个50,再传递一个60,那么他们呢,就会产生一个结果。
结果的话呢,我再用调试输出将结果输出。
好,我们先编译一下。
那么这里的方法呢,也就只对当前的这个程序有效,那么当编译好了之后呢,用其他程序调用的时候,就不能再用这个了啊。
好,那么这里呢,大家需要注意一下啊,因为是DLL,所以呢,这个是不能直接被执行的,因为它现在已经输出的是标准DLLL,没有这种调试功能了,所以呢,那这一句我们就不能在这调试了,那我们只能写另一个。
啊写另一个程序来调用它。
那么我们一会儿再来啊,我们继续看这边,那么这两个呢,大家需要是要记住。
好,我们接下来看第二个部分,那么在用之前呢,现在呢,我们要给大家介绍一下输出一个类型。
因为有的时候啊,我们调用DLL,可能说我不是只想返回一个整数,或者这样的一个a加B这么一个结果,而是我想返回一个有很多数据在一起的,那么这个东西呢,可以称之为数据类型,就说我要返回一个数据类型,那么这个时候呢,我们就必须有一个类能让我们返回,或者说是啊,能怎么样进行这样的一个操作,我们就能调用到所有的值了。
那么这个时候呢,我们就要需要使用到这样的一个结构类。
结构类啊,这里是给大家介绍的一个东西,大家需要注意一下。
结构类是用作指定是否为该类建立所有成员变量数据的C加加结构,该结构内容一般用作C啊,一般用作和外部API进行交互时使用。
那么这个呢,实际上就是可以作为DLL的一个交互,那么一会呢,给大家来看具体的一个使用,我们现在呢,先把它必要的一些条件先看完。
数据类型必须为非文本型基本数据类型那么在前面给大家介绍到了很多数据类型,那么除掉文本,那么剩下的那些呢?全部都是基本数据类型啊。
其他设置了本属性的类,也就是说这个数据类型呢,可以包含其他设置了本属性的类,也就是说结构类之间可以互相的嵌套。
这两种数据类型的数组什么意思呢?基本数据类型的数组和设置了本属性的类这样的一个数组。
那一会呢,都会给大家进行演示,然后呢,就是本属性只能用在类上,因为大家看到名字也可能知道它是视窗点结构类,所以它描述的是一个类,那这个时候呢,我们就需要用类来进行实现它,那下面呢,我们来手动写一个这样的一个类,那么在这里呢,我们插入一个新的类。
那么这个类呢,我可以把它叫做我的数据类型。
那么这个时候呢,我们要把这个。
视窗点结构类给它写上,那么这个呢,就在属性名这里。
好,我们把它写上,那么这个里头呢,实际上我们当把鼠标移上来之后,就可以看到它对应的一个说明,那么在这里呢,它的这个属性是要对应写一个属性值的啊,上面大家也看到属性名都会对应一个属性值,那么它这个属性值对应的就是一个内存对齐的这样的一个尺寸啊,按多少字节进行对齐,那么默认的话呢,我们就使用零。那么这个的话呢,如果大家有一些汇编或者C的基础啊,可以了解到更多,那么默认的话呢,我们就只写零就可以了。
好,那接下来呢,因为是数据类型,所以呢,我们肯定要有几个成员,我们先来一个普通的成员。
或者我直接就叫整数一,那么它是一个整数,那么这里呢,我就把它选中公开,然后呢。
文本肯定不行,因为刚才已经说到了文本不行,那这个时候呢,如果我想返回一个文本要怎么办呢?
那么这个时候呢,我们就用字符型的数组。
啊好比说我现在要返回一个十个长度。
我返回一个。
字符数组,那么到时候呢,会有命令对它进行一个转换,就可以变成啊这个文本型了,那现在呢,我们就需要在我们的这个输出方法当中,再额外增加这样的一个参数啊再额外增加这样的一个参数。
那么数据类型呢,就是我的数据类型,那这个里呢,我们不要跟他重名了。
啊,我们这直接就叫做数据就可以了。
然后呢,这一块的话,我们还需要一个。
视窗点输出参数,那么这个输出参数是什么意思呢?
也就是说我们当前的这个数据类型啊,会作为一个输出给输出给调用方。
啊作为一个这样调用给调用方。
那么这个如果大家知道一元的话呢,就是相当于一元当中的参考,也就是说你传过来的是什么,我就把你传过来的这个数据给它改掉,那这个时候呢,你得到的就是相当于是我返回给你的数据。
好,那这个呢,一会我们实际上来看演示,大家就了解了。
那么在这里呢,我们必须对数据进行赋值,那么首先整数的赋值非常简单啊,直接赋值就可以了,接下来呢,就是我们对应的这个字符数组,那么这里呢,大家需要用到一个命令复制到字符数组,这个命令呢,可以将一段文本复制到一串字符数组中,以此来达到这样DLL一个返回或者说一个赋值这样的效果。
那首先呢,我们要提供一段文本。
你好,火山。
然后呢,遇啊,所遇复制到的,也就是说复制到的字符数组,那这里呢,我们用数据点文本一,那么第三呢,还需要我们提供一个成员数,那么我们这个字符数组,大家看到我申请的是十个啊,所以呢,我给它把十写上。
那么这个时候呢,我们对这个数据类型的这个输出变量的一个操作就已经结束了,接下来呢,我们要再编写另外一个程序来调用我们当前的这个方法。
好,我们先保存一下代码啊,我们继续回到这边来看。
调用一个DLL,那么调用DLL的时候呢,实际上大家看到啊,它是跟导出的时候呢,这个视窗它是相反的,一个是输出,那么我们这里呢,就是输入,那么输入呢,我们来看一下,它需要一个DL名或者是lib名,那么这个lib呢,可以用类似于C或者其他类库啊,它会提供一些这样的一个lib文件,我们就可以直接进行一个导入。
作用就是指定一个输入的一类文件,那么这个输入呢,指的就是后面的这个输出名啊。
那么为什么它叫输出名呢?一会给大家来说一下,我们接着看,输入这头只能应用在类的公开静态通常方法上啊,一样的,跟输出是一样的,都是要公开静态通常方法。
然后呢,必须和输出名属性配合使用。
方法体必须为空,那么这个输入呢,它实际上更像是一个声明方法,它只是声明我当前要使用这样的一个电压命令,那么因为DL命令呢,都写在DL当中,你这个命令只是负责声明,所以你不需要写任何的代码,那么方法体呢,就必须为空,那么这个输出名呢,实际上它这里呢,是为了跟DLLDLL的输出名进行一个。
这样的一个对应,所以呢,它这里也叫做输出名,那么这里呢,相当于啊,用的也是电当中这样的名字,那么说白了就是相同就可以了啊相同就可以了,那接下来呢,我们来写代码,来调用一下我们自己编写的这个DLL。
那么在这里呢,我们再新建另一个项目,我们新建为控制台项目。
调用点来了。
好。
那么因为我刚才有一个测试例子啊,所以刚才会提示重复,那么没有关系,我们直接覆盖即可。
那么呢,我们可以直接从DLL当中把这个声明给它复制过来。
啊把声明复制过来,然后呢,在我们这里,我们可以在这个类下面啊,直接粘贴,或者说呢,在你需要用到的那个类里面进行粘贴,那么把这个方法体给它去掉,因为声明呢,是不需要方法的。
啊然后呢,输出名这个没有问题,不需要改,那么这里呢,就变成了输入,大家注意啊,这里就变成了输入,那么输入我们需要填写一个DLL的名字,那么这个DLL在哪里呢?我们要找到我们刚刚编译好的这个DLL,我们现在双击进去。
啊这个点了在这,那我们先把它的名字写上。
先把它的名字写上,那么因为参数对应的呢都是相同的,所以参数呢,我们都不用改,那么这里大家也注意到了,这里呢还用到了我们自己定义的一个数据类型,那么因为这个数据类型在DLL当中,我们这里如果要用的话呢,我们可以把它直接复制过来。
放到我们这个里面,那么我们这呢,也就可以直接来使用它了,好那么现在呢,我们已经把这两部分的声明全部都拿了过来啊全部都拿了过来,那么接下来呢,我们要先生成一下我们当前的这个调用程序。
这样的话呢,它就会生成一个这样的一个目录,我们现在要做的就是把DLL复制到我们当前的目录下,因为没有DLL的话,你的程序是跑不起来的,所以呢,我们把目录拿过来,这个是上次的测试文件,我们把它删掉。
好,那现在呢,是这样子,来看到我的主文件,还有这个DLL都在这里,然后呢,我就可以进行调用了,那么这里呢,我们在启动方法下面进行调用。
那么这个名字呢,之前说到你可以随便改,只要输出名对的上就可以了,这个名字我们可以改一个别的。
哎,我可以叫这个,因为最终呢,火山是用这个名字去找的,你前面的这个怎么改都是没有关系的啊,都是你自己可以根据自己的需要进行修改。
我们这里呢,传递参数没有问题,那么第三个呢,需要一个数据类型,所以在这里呢,我们需要新建我们自己的这个数据类型。
然后呢,我们将数据类型传递进去。
那这个时候呢,我先啊还要得到它的返回值,因为它是一个两个数相加,那么就会得到一个返回值,所以呢,我叫做DLL返回值,我们在这里调试输出一下DLL的返回值,我们来看一下运行的效果先。
诶大家看到这里呢,有一个三啊,这个三呢,就是我们的这个输出的一个结果。
那么刚才大家可能看到这个地方说出了一个110啊,那么这个是之前调试那一个DLL的时候,那一句话呢,呃,那个屏蔽啊没有屏蔽好,所以说呢,那个地方会多输出一串,那么现在的话呢,已经把这个代码修复好了啊就是这一个,那么已经没有会多余输出的问题了。
所以我们主要是看我们当前的这个点了了,那么它输出的返回值是三,那么这个是没有任何问题的啊没有任何问题的。
那么接下来我们就要看这个数据这一块,那么数据我们知道在DLL当中,我们也对这个数据进行了一个赋值,那么现在呢,我们就要看一下这个数据我们能否拿到,那么在这里呢,我们要先调试说出一下数据里边的第一个整数。
然后呢,我们要看一下啊,这个字符数组到文本,那因为前面呢,我们用到的是。
复制到字符数组,将文本拷贝到了字符数组,那现在呢,我们就要反过来字符数组到文本啊,这样的话呢,我们就能得到文本型了。
那么这里呢,同样它会需要我们一个长度,那么这个字符长度呢,就是你要将多少个啊成员转过来,那这里呢,默认我们把十个都转过来,那么过来之后呢,它现在就变成了文本型,那么我们现在再来一个变量。
文本型,然后呢,我们把转换出来的结果保存起来,然后呢,我们再调试输出我们当前的一个结果,那这个时候呢,我们来运行大家看一下效果。
999那这个是整数值,是我们在DL当中进行赋值的,然后呢,是对应的一个字符数组啊对应的一个字符数组,你好,火山这个也是我们在DLL当中进行赋值的。
最后是返回值,那这个就没有问题。

微信扫一扫

支付宝扫一扫

版权:资源来源于网络,版权归原创所以: 转载请注明出处:https://baipiaow.com/623.html

相关推荐
网站SEO的重要性
网站SEO是指通过优化网页内容、结构和链接来提高搜索引擎排名的技术。这种方法可以帮助您的网站在搜索引擎中获得更好的排名,从而吸引更多的访问者…
安普 网络资讯
日期:2023-01-14 点赞:1 阅读:1,029
外链对网站有哪些好处
SEO中外链的作用非常大,很多人都在做外链,是提高网站权重的有效手段之一。 SEO中外链可以提高网站权重和排名,让搜索引擎更容易找到网站。 …
安普 网络资讯
日期:2023-01-13 点赞:0 阅读:391
不懂代码如何搭建自己的网站?
很多朋友在搭建网站时会遇到这样的问题: 我想做个网站,但是不懂代码,如何去做呢? 如果你也有这样的困惑,那么接下来就来给大家分享一下我个人在…
安普 网络资讯
日期:2023-01-13 点赞:0 阅读:1,042
如何做好一个站长
如何做好一个站长 很多人都想做一个好站长,因为只有做一个好站长,才能给自己带来更多的收益,在这个信息时代,很多站长都希望做一个好域名。 所以…
安普 网络资讯
日期:2023-01-13 点赞:0 阅读:758
搭建网站制造基本原则
现在企业建站已经越来越普及,几乎每个企业都需要一个自己的网站,而这个网站在运营和推广上都会遇到一些问题。 今天我将为大家分享一个实用的建站方…
安普 网络资讯
日期:2023-01-13 点赞:1 阅读:436
实用的快速建站方法和网站制造基本原则
  网络营销是互联网+时代的销售方式,为企业带来了大量的商机,它是一种使用互联网技术和平台来促进产品,服务或品牌的销售与交易。   互联网时…
安普 网络资讯
日期:2022-11-26 点赞:0 阅读:999
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:9:00-16:00

客服电话

400-888-8888

客服邮箱

1736018948@qq.com

扫描二维码

关注微信公众号