安普 网络资讯 2022年10月2日
0 收藏 0 点赞 469 浏览 5976 个字
摘要 :

火山PC如何嵌入C代码。 在前面的课程当中已经给大家介绍过,火山PC实际上是将代码转换为C加加代码,然后进行编译和链接的,那么在这个过程中就允许我们手动写一些C代码……

火山PC如何嵌入C代码

火山PC如何嵌入C代码。
在前面的课程当中已经给大家介绍过,火山PC实际上是将代码转换为C加加代码,然后进行编译和链接的,那么在这个过程中就允许我们手动写一些C代码。那么在转换的时候呢,直接将C代码进行嵌入,然后呢,生成这个翻译后的文件,那么也就能实现一个嵌入C代码这样的一个操作。那么下面我们来看一下如何嵌入C代码。首先我们看嵌入C代码的关键字,嵌入代码的关键字是一个艾特符号。
再加一个空格,那么这个呢,我们需要打开火山进行实例的一个查看啊,或者说实例的编写,我们来看这里呢,是我新建好的一个空白实例,那它是一个控制台程序,那现在呢,我们就来写一些嵌入代码,来看一下它是如何进行工作的。首先一个艾特符号,再加一个空格,那么在空格之后就可以写自己的一些C语言代码,或者说C加加代码,在这里呢,我们随便写一个变量。
等于99,那这是一行C代码,然后呢,我再使用一个at符号空格,那么因为我这个是控制台程序,我可以直接对变量进行输出来查看是否成功,那我就调用一个C语言的函数。
我这输出,那么等于把我们刚才写的这个变量值输出出来看一下效果,那么因为是控制台程序,所以这里呢,我们需要一个标准输入来防止程序执行后直接退出,没有任何提示,标准输入就是让程序停下来,那么这个时候呢,我们看到我们嵌入的C代码能正常的编译并且执行,这里呢,就输出了,我们想让它输出的,那么等于。
这样的一个语句。
好,那么这个是用简单的方式来嵌入C代码,那么如果说我们有一段长的代码需要嵌入呢?我们就可以使用一个begin和and,但是呢,它是有条件的,它是在类中间的空白处才会被视为嵌入。行,那我们来看一下什么是类的空白处,之前有给大家讲到注释的时候说过在类上面。
就是不在类中的代码,那么都会作为一个备注或者说注释代码,那么同样的在这个只要是在内外的代码,大家看我随便写一些文字,它都是备注或者说注释,那么这个时候我就可以使用begin和and这两个关键字,那么这两个关键字呢,就会将中间的所有代码全部设置为这个嵌入代码。啊我们现在呢,在这里写一个变量,那我就不需要再加艾特了,因为它会自动将中间的代码转换为嵌入代码,所以呢,我就不需要加了。那我这里呢,我可以定义一个全局变量。
我定一个9990这样的一个全局变量,然后呢,我可以直接在我的程序里面用,因为它的定义大家可以从上往下看,它的定义在这个地方,然而然而我们的程序在这里,所以我就可以直接在我的程序里来调用它,那我就再加一句输出,那这回呢,我输出的就是G杠a。
等于,然后百分号D再加一个杠N换行符,这个时候我把GA输出出来,大家看一下效果。
好,这里少加了一个F啊。
大家可以看到这个效果就是这样子,就说在前面的代码呢,也都会编译进来啊编译进来。
好,那么这个是嵌入,就是两种嵌入C代码的一个方式啊。
那么该嵌入行在编译时将被直接发送到目的平台编译器,由用户自身保证该行的语法正确性。那么因为刚才我少写了一个F,那它就会进啊,直接报错,大家看到了会直接报错,所以说在写这些嵌入代码的时候呢,一定要确保代码是正常可以执行啊,否则就会报错,那么如果报错呢,就要根据啊实际的这个位置进行一个查找,然后呢,去修正它的错误。
好,这里呢给大家介绍的就是嵌入C代码这样的一个方式。
那么刚才啊,嵌入C代码完毕,那么现在呢,我们就要查看一下编译出来的文件,因为有的时候呢,我们嵌入代码之后,可能运行的效果并不是我们预期的效果,所以说我们必须要查看编译后的文件,来确定我们嵌入的代码是否正常,或者说是否正确。那现在呢,给大家介绍一下如何查看生成的文件。那么在编译后,可以在目录中找到生成的C源码文件,来查看嵌入代码是否正常。路径就是源程序路径,那么它后面生成的这个路径啊,在前面的课程中应该已经给大家说过了。
啊,我们就直接打开这个路径来看一下,那首先呢,在我们这个项目上点击右键选择啊打开啊,不是项目啊,是这个文件,我们可以直接打开所在文件夹,然后呢,我们网上查找。
一般呢,它是跟工程在一起的啊,跟工程在一起,然后找到int,我们现在是第12课,然后呢,因为是debug版,所以就只有debug x64,注意这些地方都不要找错,那么找到这个目录之后呢,我们来定位到VPKG这样的一个文件啊,然后呢,我们右键选择这个打开,那当然你可以用你系统其他的记事本打开都是可以的,那么打开之后呢,我们就能看到它的源码。
那首先啊,我们先来看。
我们的第一句嵌入代码是GA等于9990,那么实际上呢,它是放在了这个位置,那这个位置呢是。
呃,在这个两个方法中间,然后呢,也不是类当中,所以它是放在相当于是全局这样的一个位置,然后呢,我们再看下面的这个,那么下面呢,就是启动方法啊,我们可以跟着它来看,那么这个呢,我们就可以推断出啊,它是启动的一些啊,初始化,然后呢,我们看到我们的嵌入代码int,那么等于九九十九,然后紧接着是我们的两句,那么因为这里呢,我们之前啊,把它这个F删掉,所以呢,它这里会少一个,那么呢,我们更正之后重新编译啊,它就会生成正确的了。那么后面呢,是标准输入,那么标准输入呢,因为它默认的这个参数大家看到是帧,所以呢,这个地方啊,它直接写了一个帧进去,最后返回一。那么通过这样的方式呢,我们就可以看到我们嵌入的代码是否正确,那么如果不正确的话呢,就像这里啊,我们应该怎么样修改,所以说我们在这里加一个。
个F,那么现在呢,我再点击调试,那么现在呢,调试结果正常,我们再切到这里,那么因为这个编辑器啊,会自动重新读文件,所以大家看到这个F就自动加上了啊,或者说它自动从文件读了最新的结果。
那么从文件当中查看就是这样,我们继续往下看。
那么提到这个嵌入代码,肯定就会有一些特殊的符号,好比说我们想在嵌入代码中用我们火山本身的变量,那么这个时候我们就需要使用一个特殊的符号,那么这个符号也是艾特符号,但是大家注意,这个艾特符号后边如果有间括号的话,就要跟前面的那个嵌入代码的开始标志区分开,它们是不一样的,都有各自的含义。那么我们看到最多的应该是艾特后边加一个监括号,或者是艾特N加一个监括号,里面是一个成员的名字,它表示可以引用一个。
火山当中的成员,我们来看一下。
我们继续打开刚才的代码,现在呢,我新建一个局部变量,我把这个变量叫做整数一,然后呢,我给它赋值,那么这个时候如果说我想用嵌入代码的方式来读取这个整数的值,我就必须要写嵌入代码,首先是一个艾特符号,那么按照刚才说的一个at,再加一个间括号,里面输入它的名字整数一,这个时候我们就可以在嵌入代码中引用我们火山当中的值了,或者说引用火山当中的这个变量。
那么现在我要写一下嵌入代码,依然是用我们的这个输出,大家来看上前面的内容都是不变的,那么这里呢,我们就直接输出值好了,就不输出其他文字了,那么在这里呢,我直接用这样的写法,大家看用at,然后加括号,加一个成员的名字,那么这个成员呢,指的就是变量。
或者是其他的啊都可以,就是引用火山啊这样的一个操作,那么现在我们来运行看一下效果。
大家看到999是不是这样,999就输出在这里,那么这个就是火山中变量的值。
所以它的作用呢,就是引用一个火山里面的成员,或者说变量常量啊,这些都算。下面还有一种加N的方法,加N的方法实际上作用和上面这种不加N的是一样的,但是不加N的呢,会有一些其他的限制条件,但是加了N之后,大家看到就没有就不受很多这个限制了。我们来看本格式仅加入最后一个成员名称。
本格式文本引用成员时,不受静态成员访问格式限制,本格式文本引用成员时不受访问权限的限制,那么就相当于用了这个之后,你就可以使用任何你看到的这个成员啊,所以在用的时候就非常的需要小心,那么这里开发文档当中也写了,就必须要十分小心,而且呢,还要确保没有问题,也就是说用它的时候呢,就要多调试多看啊,多调试多看。
我们主要介绍的呢,就是上面这种啊,如果你特别有把握,也可以使用下面,不过通常还是用上面的比较多。
看完了上面,我们来看一下这边。
这边常用的还有两个,一个是DT,一个是PDT,我们先从DT来看,DT间括号里面需要我们给定一个数据类型的名字,因为火山当中的数据类型在C的时候啊,就是在这个翻译的时候,它还是要有一个改变,所以说我们如果想在嵌入代码当中直接使用火山里面的数据类型。
那么我们就需要进行这样的一个转换。
那么转换也有限制条件,我们要来看一下,不支持数组数据类型。
如果本替换符后跟随的不是对象成员访问字,譬如据点别名类将使用其所封装的本地类名,常量类将使用其所对应的基本数据类型。什么意思呢,也就是说。
如果后面不是据点,那什么是据点呢?就像这样DT,然后这中间是一个成,呃,数据成员的名字,后面是一个据点,那么这个时候它就会按照你这样的形式进行转换,如果说你后面不是据点的话,那么他就会去根据现在的一个需要进行动态的这样的一个转换,因为如果没有的话,那肯定是做其他操作,所以说呢,就要进行其他的一些转换,那这个呢,我们来也来写一个例子来看一下。
那么这里呢,给大家来做一个演示,那么我们用什么演示呢?我们用一个相当于是取数据类型长度来给大家进行一下演示,那首先还是嵌入代码,然后我们输出整数,因为取道的长度是整数,然后呢,我们使用三任,这个时候呢,我们就要提供一个数据类型,数据类型呢,我们就可以提供。
我们火山当中的数据类型,那么这里呢,给大家提供一个啊,变整数这样的一个类型,我们来看一下效果,因为变整数在32位的时候就是普通的整数,而在64位的时候呢,它就相当于是长整数,所以它的长度是不一样的,我们现在编译的就是64位程序,所以呢,它输出的长度就是八。
这个呢,在使用这种类型的时候啊,就要使用DT这样的一个方式来调用里面的类型。
然后我们看一下下一个PDT它的作用呢,实际上是取参数啊,取参数的一个数据类型。
那么它的用法呢,跟上面的这个也是一样的,上面呢只是取数据类型的名字,那么下面这个呢,取的是参数的名字啊就是这样,那么这里呢,就不给大家做额外的演示了。
我们继续往后看。
在这里呢,有一个这样的符号SNSN后面可以跟很多特定的名字,在这里呢进行了一些简化,如果完整版大家可以看帮助文档,这里做了一些简化,我们可以看到。
现这个根据英文的意思我们就可以得到啊,这个是所处类的一个名字,这个第二个呢,就是类的一个鸡肋,鸡肋的名字。
这次啊,就表示当前大家注意啊,是非静态嵌入式方法中嵌入行使用。
呃,将被替换为调用该嵌入式方法时提供的调用对象啊,就是贼字啊,可以把它认为是贼字指针。
PM type这个是嵌入式方法,用到可变参数的时候,会用到这一个可变参数,用来取所有参数的数据类型的时候,可以用PM type进行取,取得之后呢,会有一个,呃,列表字符串,这个大家可以通过官方的库里面啊,找到一些带有这种。
这这个这个标识呢,可以看一下里边的命令。
最后一个是随机名字,这个就是在程序中啊,会随机生成一个唯一性的这样的一个名字,那么这些呢,都在具体的时候才会有作用啊,这里也不给大家进行演示了。
那么接下来就要给大家介绍两个。
在这个嵌入代码的时候啊,可能会用到的几个比较有用的这样的一个属性,那首先我们先来看全局类,这个全局类呢,实际上是在编写模块的时候会用到,它的作用是用来定义类的啊表示呢,当前这个类为全局类,全局类是什么意思呢?我们来看一下。
全局类像字节集,大家看到我打字节集类的时候,前面那个字节集类,它这个名字上面有一个像G英文字母G这样的一个字符,就表示它是一个全局类,全局类是什么呢?我们可以直接调用全局类里面的静态方法,静态公开方法。
好比说我们可以调用取字节集长度,因为取字节集长度呢,实际上它是字节集类中的一个方法,大家看我们往上找,找到它类的声明。
大家可以看到它是字节级类里面的方法,但是又因为它是公开静态的,所以呢,当全局类被指定的时候,我们就可以直接在外部调用全局类里面的方法,而不需要再把类名写上啊,这个类名就不需要再写了。那么全局类呢,就是有这点好处,我们在写代码的时候呢,就会就可以直接引用啊,非常方便。那么它的用法呢,也非常简单啊,逻辑型真和假,我们通过刚才这一个也可以看到全局类,然后呢,这里写一个真就可以了。
然后就是禁止流程检查,那么禁止流程检查这个非常的有必要,如果在嵌入方法当中,或者说我们的这个子程序里面啊,用的全部都是嵌入C的这样的一个代码,那这个时候肯定就没有返回了,但是呢,没有返回就没有办法通过火山编译的时候的一个语法检查,所以说我们就必须在方法上面指定禁止流程检查,这个时候呢。
编译器就不会再提供,呃,提示我们这个这个方法没有返回,那现在呢,我们写一个方法来试一下,我现在插入一个新方法,我在这里呢,随便给它起一个名字啊,这个名字就不重要了。
然后呢,我在里面写几句嵌入代码,我就把这三行复制过来。
大家看到我这就是一个嵌入方法。
那么这个时候呢,好比说我现在要给它一个返回值,那么返回值呢,我也用嵌入的来返回,我就返回这个那么的值,那么在这看起来,我这个C代码写的都是没有问题的。
当我们运行的时候,我来调用一下。
大家看到这个时候它就会提示没有啊,就是说不是所有的这个分支都返回了值,就是因为我们后边它没有找到返回关键字,所以在这里呢,我们就要加一个禁止流程检查,同样把它设为帧,这个时候我们再编译就会直接通过了啊当然下面这个错误的话,我们就先不看啊,主要是我们先看这个,就禁止流程检查这一块,他就不会再检查你流程里面的错误啊,不会再检查流程里面的错误了。
这个呢,就是这两个,那么其他更多的话呢,大家可以。
可以有两种方法,第一是查看其他人已经开发好的程序,从其他的程序里学习。
那么这个呢,是最快而且最有效的,包括火山官方类库,我们也可以直接查看火山官方的类库,然后从它里面找到一些我们想要实现的,或者说跟我们实现命令比较相近的这样的一个功能或者说方法,我们直接去查看它的源代码,看看它是如何写的,然后呢,我们再,呃,把它拿出来,然后再写成我们自己的,啊,这样子。
第二就是查看火山官方的帮助文档,之前就跟大家说过,官方文档是如果说有有准备要做模块开发或者类库开发,是一定要看官方文档的。这一课也是简单的介绍了几个啊比较重要的东西,那么还有很多都写在文档里,因为课时的原因啊,没有办法给大家一一进行介绍,所以如果要看的话啊,大家还是去看官方手册。那么要说明一下,如果是火山的初学者。
啊,就没有必要去太过细致的了解本课的内容,本课主要是面向内库的开发者。
向类库开发者介绍一些在类库开发中会用到的内容,当然更多的、更具体的肯定是要以官方为主,因为这个官方后期有可能会修改,或者说有一些其他的情况,所以说一切都以官方为主,这一课呢,只是给大家做一个简单的介绍。

微信扫一扫

支付宝扫一扫

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

相关推荐
网站SEO的重要性
网站SEO是指通过优化网页内容、结构和链接来提高搜索引擎排名的技术。这种方法可以帮助您的网站在搜索引擎中获得更好的排名,从而吸引更多的访问者…
安普 网络资讯
日期:2023-01-14 点赞:1 阅读:1,028
外链对网站有哪些好处
SEO中外链的作用非常大,很多人都在做外链,是提高网站权重的有效手段之一。 SEO中外链可以提高网站权重和排名,让搜索引擎更容易找到网站。 …
安普 网络资讯
日期:2023-01-13 点赞:0 阅读:390
不懂代码如何搭建自己的网站?
很多朋友在搭建网站时会遇到这样的问题: 我想做个网站,但是不懂代码,如何去做呢? 如果你也有这样的困惑,那么接下来就来给大家分享一下我个人在…
安普 网络资讯
日期: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

扫描二维码

关注微信公众号