递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 368|回复: 4
打印 上一主题 下一主题

[视窗] 火山视窗如何引用C++头文h文件跟cpp文件

[复制链接]

1

主题

10

帖子

247

积分

中级会员

Rank: 3Rank: 3

积分
247
跳转到指定楼层
楼主
发表于 前天 23:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如题火山视窗如何引用C++头文h文件跟cpp文件,也没个详细教程,

请各大佬给下面头文件给个例子
  1. /*
  2.                 Axia|FilePack
  3.                         文件包系统总接口

  4.         注意:
  5.           所有功能都没有考虑多线程应用!!!
  6. */

  7. #pragma once

  8. namespace AXP
  9. {
  10. /************************************
  11.                         API函数定义
  12. *************************************/
  13. #ifdef AXP_STATIC_LIB
  14.         #define AXP_API
  15. #else
  16.         #ifdef AXP_EXPORTS
  17.                 #define AXP_API __declspec(dllexport)
  18.         #else
  19.                 #define AXP_API __declspec(dllimport)
  20.         #endif
  21. #endif



  22. /************************************
  23.                         预定义
  24. *************************************/
  25. class IPakFile;
  26. class IStream;
  27. class IPakMaker;
  28. class IPatchMaker;
  29. class IUpdater;


  30. /************************************
  31.                         错误代码
  32. *************************************/
  33. enum AXP_ERRORS
  34. {
  35.         AXP_ERR_SUCCESS = 0,                //成功

  36.         AXP_ERR_FILE_NOTFOUND,                //文件/路径不存在
  37.         AXP_ERR_FILE_FORMAT,                //文件格式错误
  38.         AXP_ERR_FILE_ACCESS,                //无访问权限
  39.         AXP_ERR_FILE_READ,                        //读文件错误
  40.         AXP_ERR_FILE_WRITE,                        //写入文件错误
  41.         AXP_ERR_FILE_POINT,                        //移动文件指针错误
  42.         AXP_ERR_FILE_EDITMODE,                //编辑模式错误
  43.         AXP_ERR_FILE_DIFF,                        //文件不同
  44.         AXP_ERR_MEMORY,                                //没有足够的内存
  45.         AXP_ERR_PARAM,                                //参数错误
  46.         AXP_ERR_HASHFULL,                        //Hash表满了
  47.         AXP_ERR_BLOCKFULL,                        //Block表满了
  48.         AXP_ERR_ANALYSENEED,                //目录必须经过分析
  49.         AXP_ERR_ZIPFILE,                        //ZIP文件操作错误
  50.         AXP_ERR_CRCFAILED,                        //CRC校验失败
  51. };

  52. /************************************
  53.                  数据内容类型
  54. *************************************/
  55. enum AXP_CONTENTS
  56. {
  57.         AC_DISKFILE,        //磁盘文件内容
  58.         AC_MEMORY,                //内存
  59. };

  60. /************************************
  61.                 版本差异操作
  62. *************************************/
  63. enum UPDATE_PROCESS
  64. {
  65.         UP_NEW_FILE = 0,                //文件更新
  66.         UP_DEL_FILE = 1,                //文件删除
  67. };

  68. /************************************
  69.                         API接口
  70. *************************************/

  71. //创建一个Pak文件接口
  72. IPakFile*                AXP_API        createPakFile(void);
  73. //删除一个pak文件接口
  74. void                        AXP_API        destroyPakFile(IPakFile* pFile);

  75. //创建一个PakMaker接口
  76. IPakMaker*                AXP_API        createPakMaker(void);
  77. //删除一个PakMaker接口
  78. void                        AXP_API        destroyPakMaker(IPakMaker* pMaker);

  79. //创建一个PatchMaker接口
  80. IPatchMaker*        AXP_API        createPatchMaker(void);
  81. //删除一个PatchMaker接口
  82. void                        AXP_API        destroyPatchMaker(IPatchMaker* pPatchMaker);

  83. //创建一个Updater接口
  84. IUpdater*                AXP_API        createUpdater(void);
  85. //删除一个Updater接口
  86. void                        AXP_API        destroyUpdater(IUpdater* pUpdater);

  87. //得到上一个错误
  88. AXP_ERRORS                AXP_API        getLastError(void);
  89. //得到上一个错误的描述
  90. const char*                AXP_API        getLastErrorDesc(void);


  91. /************************************
  92.                         打包文件接口
  93. *************************************/
  94. class IPakFile
  95. {
  96. public:
  97.         /*!
  98.         \brief
  99.                 打开一个存在的pak文件

  100.         \param szFileName
  101.                 文件名

  102.         \param bConst
  103.                 是否以只读方式打开文件

  104.         \return
  105.                 是否成功
  106.         */
  107.         virtual bool openPakFile(const char* szPackFileName, bool bConst) = 0;

  108.         /*!
  109.         \brief
  110.                 创建一个新的pak文件

  111.         \param szPackFileName
  112.                 文件名

  113.         \return
  114.                 是否成功
  115.         */
  116.         virtual bool createNewPakFile(const char* szPackFileName) = 0;

  117.         /*!
  118.         \brief
  119.                 关闭文件

  120.         \return
  121.                 None
  122.         */
  123.         virtual void closePakFile(void) = 0;

  124.         /*!
  125.         \brief
  126.                 某文件在包中是否存在

  127.         \param szFileName
  128.                 文件名,该文件名会被自动规范化(字符变成小写, '\'转化为'/')
  129.                 外部不需要做规范化

  130.         \return
  131.                 文件是否存在
  132.         */
  133.         virtual bool isFileExists(const char* szFileName) const = 0;

  134.         /*!
  135.         \brief
  136.                 以文件流方式打开包中的一个文件

  137.         \param szFileName
  138.                 文件名,该文件名会被自动规范化(字符变成小写, '\'转化为'/')
  139.                 外部不需要做规范化

  140.         \return
  141.                 数据流指针,如果失败, 返回0
  142.         */
  143.         virtual IStream* openFile(const char* szFileName) = 0;

  144.         /*!
  145.         \brief
  146.                 得到包中某个文件的大小

  147.         \param szFileName
  148.                 文件名,该文件名会被自动规范化(字符变成小写, '\'转化为'/')
  149.                 外部不需要做规范化

  150.         \return
  151.                 文件大小(bytes), 如果文件不存在,返回0
  152.         */
  153.         virtual unsigned int getFileSize(const char* szFileName) const = 0;

  154.         /*!
  155.         \brief
  156.                 加入/更新一个磁盘文件或者内存文件到包中
  157.        
  158.         \param szContents
  159.                 磁盘文件名,或者内存地址

  160.         \param nContentsLen
  161.                 内存大小(bytes),对于加入磁盘文件方式,该参数无效

  162.         \param szFileInPak
  163.                 加入到包中后,在包中的文件名

  164.         \param sourceType
  165.                 数据源类型

  166.         \param bSaveAtOnce
  167.                 是否需要马上存入磁盘

  168.         \return
  169.                 是否成功
  170.         */
  171.         virtual bool insertContents(const char* szContents, unsigned int nContentsLen,
  172.                                         const char* szFileInPak, AXP_CONTENTS sourceType, bool bSaveAtOnce) = 0;

  173.         /*!
  174.         \brief
  175.                 将一个文件从包中删除

  176.         \param szFileInPak
  177.                 在包中的文件名

  178.         \return
  179.                 是否成功gone
  180.         */
  181.         virtual bool removeFile(const char* szFileInPak, bool bSaveAtOnce) = 0;

  182.         /*!
  183.         \brief
  184.                 自检回调函数

  185.         \param szFileName
  186.                 文件名

  187.         \param pFileStream
  188.                 文件内容流

  189.         \param
  190.                 文件是否合法
  191.         */
  192.         typedef bool (__stdcall *SELFCHECK_CALLBACK)(const char* szFileName, IStream* pFileStream);

  193.         /*
  194.         \brief
  195.                 文件自检功能

  196.         \remark
  197.                 检测内容包括
  198.                         1. 文件状态是否正确,如果是编辑状态则错误
  199.                         2. 打开"(list)"文件,检测列表中的文件的大小,crc是否和实际内容是否对应
  200.                         3. 检测hash表和Block表是否有多余的内容
  201.                         4. 每个文件由
  202.         */
  203.         virtual bool selfCheck(SELFCHECK_CALLBACK callBack) = 0;
  204. };


  205. /************************************
  206.         文件流接口,用于读取包中的文件
  207. *************************************/
  208. class IStream
  209. {
  210. public:
  211.         /*!
  212.         \brief
  213.                 Read the requisite number of bytes from the stream,
  214.                 stopping at the end of the file.
  215.         \param buf
  216.                 Reference to a buffer pointer
  217.         \param count
  218.                 Number of bytes to read
  219.         \returns
  220.                 The number of bytes read
  221.         */
  222.         virtual unsigned int __fastcall read(void* buf, unsigned int count) = 0;

  223.         /*!
  224.         \brief       
  225.                 Get a single line from the stream.

  226.         \param retBuf
  227.                 Reference to a buffer pointer

  228.         \param maxCount
  229.                 The maximum length of data to be read, excluding the terminating character

  230.         \returns
  231.                 The number of bytes read, excluding the terminating character
  232.         */
  233.         virtual unsigned int readLine(char* retBuf, unsigned int maxCount) = 0;

  234.         /*!
  235.         \brief
  236.                 Skip a single line from the stream.

  237.         \return
  238.                 The number of bytes skipped
  239.         */
  240.         virtual unsigned int skipLine(void) = 0;

  241.         /*!
  242.         \brief
  243.                 Repositions the read point to a specified byte.
  244.         */
  245.         virtual void seek(unsigned int pos) = 0;

  246.         /*!
  247.         \brief
  248.                 Returns the current byte offset from beginning
  249.         */
  250.         virtual unsigned int tell(void) const = 0;

  251.         /*!
  252.         \brief
  253.                 Returns true if the stream has reached the end.
  254.         */
  255.         virtual bool eof(void) const = 0;

  256.         /*!
  257.         \brief
  258.                 Returns the total size of the data to be read from the stream,
  259.                 or 0 if this is indeterminate for this stream.
  260.         */
  261.         virtual unsigned int size(void) const = 0;

  262.         /*!
  263.                 Return the crc checksum of this contents.
  264.         */
  265.         virtual unsigned int crc(void) = 0;

  266.         /*!
  267.         \brief
  268.                 Close this file, can't call any function after now!
  269.         */
  270.         virtual void close(void) = 0;
  271. };

  272. /*******************************************
  273. Pak文件制作者接口,用于制作全新的Pak文件
  274. ********************************************/
  275. class IPakMaker
  276. {
  277. public:
  278.         /*!
  279.         \brief
  280.                 将磁盘上一个目录加入到包中

  281.         \param szFoldInDisk
  282.                 磁盘路径名

  283.         \param szFoldInPak
  284.                 在包中的路径名,加入的文件在pak包中的名称是相对于该路径的,
  285.                 如果加在包中的根目录下,该参数为为空字符串""

  286.         \param szExtFilter
  287.                 文件后缀过滤器,使用';'分割多个后缀,例如 "bmp;jpg", 如果为空,表示所有文件

  288.         \param bRecursive
  289.                 是否递归

  290.         \return
  291.                 是否成功加入,通过getLastError获得错误原因
  292.         */
  293.         virtual bool addDiskFold(const char* szFoldInDisk, const char* szFoldInPak, const char* szExtFilter, bool bRecursive=true) = 0;

  294.         /*!
  295.         \brief
  296.                 加入磁盘上单个文件到包中

  297.         \param szFileInDisk
  298.                 文件在磁盘上的路径

  299.         \param szFileInPak
  300.                 文件在包中的名称, 这个名称中的'\'符号会被自动转化为'/', 但大小写不会转化

  301.         \return
  302.                 是否成功加入,通过getLastError获得错误原因
  303.         */
  304.         virtual bool addDiskFile(const char* szFileInDisk, const char* szFileInPak) = 0;

  305.         /*!
  306.         \brief
  307.                 保存Pak文件时文件名回调函数

  308.         \param szNameInDiskOrg
  309.                 磁盘上需要打包的文件名

  310.         \param szNameInPak
  311.                 在包中的文件名

  312.         \param szNameInDisk
  313.                 Callback返回的,经过内容转化的磁盘文件名

  314.         \param szNameBufLen
  315.                 szNameInDisk的长度(bytes)

  316.         \return
  317.                 该文件是否需要加入到包中
  318.         */
  319.         typedef bool (__stdcall *AXP_PAKMAKER_SAVECALLBACK)(const char *szNameInDiskOrg,
  320.                                                                 const char* szNameInPak, char* szNameInDisk, int nNameBufLen);

  321.         /*!
  322.         \brief
  323.                 将加入的文件保存成pak文件,

  324.         \param szPakName
  325.                 打包文件的文件名

  326.         \param AXP_PAKMAKER_SAVECALLBACK
  327.                 回调函数

  328.         \return
  329.                 是否成功加入,通过getLastError获得错误原因
  330.         */
  331.         virtual bool savePakFile(const char* szPakFileName, AXP_PAKMAKER_SAVECALLBACK callbackFunc) = 0;

  332.         /*!
  333.         \breif
  334.                 文件比较时的回调函数

  335.         \param szFileNameInDisk
  336.                 磁盘上的文件名

  337.         \param pDataStream
  338.                 在包中的数据,有可能使0

  339.         \return
  340.                 文件是否相同

  341.         \remark
  342.                 有可能有部分文件不需要打入pak包内,这时pDataStream为0
  343.         */
  344.         typedef bool (__stdcall *AXP_PAKMAKER_COMPARECALLBACK)(
  345.                                                                 const char* szFileNameInDisk, IStream* pDataStream);

  346.         /*
  347.         \brief
  348.                 将加入的文件和现有的pak文件作内容比较,用于程序测试

  349.         \param szPakFileName
  350.                 现有的pak文件

  351.         \param callbackFunc
  352.                 比较回调函数

  353.         \return
  354.                 是否完全相同,使用getLastError获得原因

  355.         */
  356.         virtual bool comparePakFile(const char* szPakFileName, AXP_PAKMAKER_COMPARECALLBACK callbackFunc) = 0;
  357. };

  358. /*******************************************
  359. 补丁制作者,用于根据两个版本之间差异制作补丁
  360. *******************************************/
  361. class IPatchMaker
  362. {
  363. public:
  364.         /*!
  365.         \brief
  366.                 分析目录, 如果参数szVersion存在,则会重新创建版本文件"(version)"

  367.         \param szPath
  368.                 需要分析的目录路径

  369.         \param szVersion
  370.                 设置的版本号,
  371.                         如果该参数存在,则会重新创建版本文件"(version)",

  372.                         如果该参数不存在,则会打开已经存在的"(version)"文件,这种情况下"(version)"
  373.                         必须存在,如果不存在,会返回错误

  374.         \return
  375.                 是否成功,如果不成功,使用getLastError得到错误值
  376.         */
  377.         virtual bool analysePath(const char* szPath, const char* szVersion) = 0;

  378.         /*!
  379.         \brief
  380.                 得到某个目录的版本,该目录必须经过分析,否则会返回 ""

  381.         \param szPath
  382.                 目录路径

  383.         \return
  384.                 该目录的版本号,如果目录没有经过分析,返回空字符串
  385.         */
  386.         virtual const char* getPathVersion(const char* szPath) = 0;

  387.         /*!
  388.         \brief
  389.                 生成Patch包时的回调函数

  390.         \param szPakName
  391.                 Pak包文件名

  392.         \param szFileName
  393.                 文件名

  394.         \return
  395.                 是否需要加入到Patch中
  396.         */
  397.         typedef bool (__stdcall *AXP_PATCHMAKER_CALLBACK)(const char *szPakName, const char* szFileName);

  398.         /*!
  399.         \brief
  400.                 根据两个目录的分析结果,产生版本差异Patch

  401.         \param szOldVersionPath
  402.                 旧版本目录, 该目录必须经过分析

  403.         \param szNewVersionpath
  404.                 新版本目录, 该目录必须经过分析

  405.         \param szPatchFile
  406.                 产生的Patch文件名

  407.         \return
  408.                 是否成功
  409.         */
  410.         virtual bool generatePatch(const char* szOldVersionPath, const char* szNewVersionpath,
  411.                                         const char* szPatchFile, AXP_PATCHMAKER_CALLBACK callBackFunc) = 0;
  412. };

  413. /*******************************************
  414.   版本升级接口,用于将旧版本升级到新版本
  415. *******************************************/
  416. class IUpdater
  417. {
  418. public:
  419.         /*!
  420.         \brief
  421.                 检查一个文件末尾的crc校验码是否正确

  422.         \param szPatchFile
  423.                 文件名

  424.         \return
  425.                 是否成功
  426.         */
  427.         virtual bool checkPatchFileCRC(const char* szPatchFile) = 0;

  428.         /*!
  429.         \brief
  430.                 添加一个Patch升级包到升级操作中,后添加的后操作

  431.         \param szPatchFile
  432.                 Patch升级包文件

  433.         \return
  434.                 是否成功
  435.         */
  436.         virtual bool addPatchFile(const char* szPatchFile) = 0;

  437.         /*!
  438.         \brief
  439.                 返回需要更新的文件数量

  440.         \return
  441.                 需要更新的文件数量
  442.         */
  443.         virtual unsigned int getUpdateFile(void) const = 0;

  444.         /*!
  445.         \brief
  446.                 升级时的回调函数

  447.         \param szPakName
  448.                 Pak包文件名

  449.         \param szFileName
  450.                 文件名

  451.         \param process
  452.                 所执行的操作

  453.         \return
  454.                 是否需要加入到Patch中
  455.         */
  456.         typedef void (__stdcall *AXP_UPDATE_CALLBACK)(const char *szPakName, const char* szFileName,
  457.                                                                         UPDATE_PROCESS process);

  458.         /*!
  459.         \brief
  460.                 按照所加入的Patch包,升级某个目录

  461.         \param szPath
  462.                 需要升级的版本目录

  463.         \param callBack
  464.                 升级回调函数

  465.         \return
  466.                 是否成功
  467.         */
  468.         virtual bool updateVersion(const char* szPath, AXP_UPDATE_CALLBACK callBack) = 0;

  469.         /*!
  470.         \brief
  471.                 检测一个文件的crc校验码

  472.         \param szFileName
  473.                 文件名

  474.         \param dwCrc32
  475.                 返回的crc码

  476.         \param bIgnoreTail
  477.                 是否忽略最后四个字节

  478.         \return
  479.                 是否成功
  480.         */
  481.         virtual bool crcFile(const char* szFilename, unsigned int &dwCrc32, bool bIgnoreTail=false) = 0;

  482.         /*!
  483.         \brief
  484.                 根据zip文件获得一个由zzip库调用zzip_dir_open_ext_io时读取zip文件的io接口

  485.         \param szZipFile
  486.                 zip文件名

  487.         \return
  488.                 返回的io接口(zziplib 中的 zzip_plugin_io_t 指针
  489.         */
  490.         virtual void* getEncryptZipPluginIO(const char* szZipFile) const = 0;
  491.         /*!
  492.         \brief
  493.                 加密/解密zip文件, 并自动加上crc校验尾

  494.         \param szPatchFile
  495.                 需要处理的文件

  496.         \param szPatchFile
  497.                 处理后的文件

  498.         \return
  499.                 是否成功

  500.         \remark
  501.                 函数会自动判断该文件是否经过了crc校验,不会重复校验
  502.         */
  503.         virtual bool encryptZipFile(const char* szPatchFile, const char* szNewPatchFile) const = 0;
  504. };

  505. }
复制代码




回复

使用道具 举报

29

主题

2395

帖子

8537

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
8537
沙发
发表于 昨天 09:01 | 只看该作者
火山的模块都是例子
回复

使用道具 举报

270

主题

1913

帖子

7705

积分

贵宾

Rank: 9Rank: 9Rank: 9

积分
7705
QQ
板凳
发表于 昨天 09:23 | 只看该作者
可以购买这个教程

当然除了这个,还有官方语法手册可以学习

火山视窗封装视频教程
回复

使用道具 举报

58

主题

541

帖子

4101

积分

贵宾

火山官方交流群:831858564

Rank: 9Rank: 9Rank: 9

积分
4101
QQ
地板
发表于 昨天 11:31 | 只看该作者
《火山视窗模块编写封装课程》
https://bbs.voldp.com/thread-26508-1-1.html
(出处: 递归火山软件开发平台)




回复

使用道具 举报

27

主题

153

帖子

2890

积分

核心用户

流浪的攻城狮

Rank: 9Rank: 9Rank: 9

积分
2890
5#
发表于 昨天 19:51 | 只看该作者
火山的模块都是例子
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-7-22 16:16 , Processed in 0.102959 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表