当前博客:封装前言之C++(一)

1056 次浏览

火山PC封装多多少少都应该懂些C++,本文就针对有易语言或者火山PC基础、不懂C++的人简单快速地讲解下C++软件的使用
本文使用vs2019 版本16.7.12   vs2019软件安装此文就不在赘述.
首先打开vs2019主程序
与火山创建项目界面类似,可以选择项目类型  空项目、控制台、桌面向导  MFC...等等
通常情况,要封装模块 大多都是 先有源码 源码来源可以是自己写 也可以是 github 、gitee 、百度 等等
一般 github 、gitee 仓库的开源 的 项目 都包含 源码 或者 库 头文件  、使用例子 或者说明文档 
封装之前 大多都需要 你用vs跑个例子(有相当一部分源码例子你可能都运行不起来)  确定没问题 再进行 火山pc模块封装
①有例子 你可以直接打开例子项目 源码  
②没有样例,通常我们为了快速测试 一般都选择空项目 或者 控制台项目   本文以空项目 封装op插件(类似大漠插件)为例 展开介绍:
首先,要在vs里调试成功
项目名称  位置 等等 自己填写    是否放在同一目录    勾选不勾选都可以
在 菜单栏 -  项目  --  ***属性  (最后一个)  --- 配置属性  -- 高级  - 右侧  字符集 可以设置 Unicode或者多字节
火山就是采用Unicode    易语言采用的是多字节

新建一个 源.cpp文件    将op插件的 include    lib 两个文件夹 拷贝到 源.cpp目录
双击 打开源.cpp文件 
首先要 把插件头文件包含到源.cpp里
   注意其语法 
#include "include/op_i.h"        
#pragma comment(lib,"lib/op_x64.lib")
接下来就是 开始测试插件api
再介绍下部分C++基本数据类型吧
火山PC C++  备注
 整数 int 
 长整数 long long 
 变整数 - 
 文本型char  或  wchar_t 火山文本型实际是个类,使用的是基类型是wchar_t,
C++官方还有string类等等,以方便操作   string 在头文件 #include
头文件里有string(基于char封装)和wstring(基于wchar_t封装)两个类
在C++中 如果采用Unicode  参数或者变量是wchar_t 或者wstring 
直接赋值文本 就需要 加上L 或者 TEXT()  例如  L"测试" 或者 TEXT("测试") 
反撇号 \ 与火山一样 都需要转义  例如 L"C:\\Users\\Administrator\\Desktop"
 字节char  
 字节集类unsigned char[]  字节集类的实质就是 unsigned char数组  
 小数 double 小数还有float 
 逻辑型 bool  C++还有BOOL 与bool不一样,BOOL 是int的别名 取值为0或1
 短整数 short 
在C++中 int  long 等 都可以用 unsigned  来修饰   unsigned 是无符号的意思
 
main是控制台入口(用控制台是为了方便快速测试
int main(int argc, char* argv[]) //或者省略参数 直接 int  main()
{
//这里开始写你的测试代码
using namespace std;  //使用命名空间     wstring 就需要使用 std  
//所谓命名空间 就好比火山的一个公开类,属性不要填写 @全局类 真   类方法均为公开静态  (如果比喻不当请指正)
// 如果你有查看火山编译后的C++源码就会发现 火山里采用了大量的 using namespace 也就是火山的万物基于类的一部分
libop op; //libop是op插件的类 ,api都在里面 .这里新建个类对象 相当于火山
wstring ver; // 声明一个 ver文本变量  如果不写 using namespace std;  那么就要 std::wstring ver;
op.Ver(ver);//调用插件的 api 查询插件版本 
std::wcout << ver << std::endl;   //用于向控制台窗口输出信息 cout (wcout) 需要#include 此处可以省略std::   
//....其他api一样  
   return 0;
}
我们来看看输出结果
调试正常 
接下来就可以开始 封装了
将需要的文件夹 库 等资源 拷贝到  op插件.v 目录
在类下面 @begin @end 可以 省去 每一行 开头都写 @    
注意@begin @end只能用于 类下面 ,不可用于方法下
在方法里  普通代码 或者api 每行开头都需要一个@和一个空格(至少1个空格)  
注意  如果 libop  op; 不写在   和 里 
则  实际使用起来 只能有1个对象  即便你建2 个op插件类 实际还是1个 

封装里 经常 会用到火山的文本型 传参  或者 返回值 返回火山的文本型
火山文本型转 wchar_t* 指针  (或者const wchar_t* )     @  你的方法(@<火山文本型参数>.GetText(),,,,);
wstring 转火山文本型    需要取wstring 的字串符指针     直接用@ return wstring变量.c_str();  返回即可
火山文本转多字节   @  你的方法(GetMbsText(火山文本型参数.GetText(), CVolMem(), NULL),,,,,);
char 转火山文本型   @ return   CA2CT(ret);   //ret是 char*指针 (或const char *)
还有好多方法.....
还有万能的MultiByteToWideChar和WideCharToMultiByte      一般不采用这个  写法较复杂 
例如 
@ int dwNum = WideCharToMultiByte(CP_OEMCP,NULL,@<路径>,-1,NULL,NULL,0,NULL); 
@ char *pszCode = new char[dwNum];  //用new的记得完@ delete []pszCode;  
//或者 char pszCode[4096] = "\0";  //局部变量 不能超过4096  这个不用delete  
@ WideCharToMultiByte(CP_OEMCP,NULL,@<路径>,-1,pszCode,dwNum,0,NULL);
 //传递参数 传递 pszCode  即可   

额外话题:开源的op插件 不支持debug调试  而火山没有release调试 所以只能编译发布版本成品测试  ..
望火山pc能加入release调试
附上 C++项目和 火山模块 

点击跳转资源

Generic placeholder image
利快云编程教育平台 Time: 2021-03-28 18:39:45

****啊 这个源码

Generic placeholder image
老婆珍爱永远在一起 Time: 2021-03-28 19:56:03

有教程吗

Generic placeholder image
渤海湾海盗 Time: 2021-03-30 00:05:18

谢谢大家****


封装前言之C++(一)