当前位置:   article > 正文

openvpn-GUI二次开发_openvpg gui

openvpg gui

20240410

记录一下事情的开始~~~

搭建开发环境

参考:

https://github.com/OpenVPN/openvpn-gui?tab=readme-ov-file#readme

openvpn-gui/BUILD.rst at master · OpenVPN/openvpn-gui · GitHub

编译器选择vs2022,同时做集成开发环境,

VS2022安装

编程小白必看!Visual Studio 2022详细安装使用教程(C/C++编译器)-CSDN博客

组件对应关系查找:

Visual Studio 生成工具工作负载和组件 ID | Microsoft Learn

VS安装完,开始开发

openvpn-GUI项目是用CmakeList.txt做项目管理的,

VS打开CMake工程:

VS2022打开已有CMake工程 - 知乎

遇到如下错误:

手动安装vcpkg环境

VS2022 + vcpkg 使用 - 知乎

VS2022中安装vcpkg来使用第三方库gnuplot matplot++,实现简单绘图功能,数据分析_vs2022 vcpkg-CSDN博客

vcpkg配置好,打开CMake工程(CmakeList.txt文件所在目录),VS会主动解析CmakeList文件

然后会进入上图,下载CMake工具包,就开始进入下载各种工具包的阶段(通过vcpkg包管理工具),我开始用公司网络很差,下载几次都失败,后面切换自己手机热点(心疼我的流量),

但也还是很慢,包都好大,

包都下载完,又卡在下面

参考:

使用 CMake 预设进行配置和生成 | Microsoft Learn

最后几经摸索,做了下面工作

然后神奇的,Cmake分析生成vs项目成功了

然后运行项目,

编译失败,继续探索吧

代码熟悉

首先我想要弄懂的是,界面用什么编写的,蛛丝马迹查找,

貌似是用的windows原生的API

TaskDialogIndirect 函数 (commctrl.h) - Win32 apps | Microsoft Learn

史上最“屌”的纯WINAPI界面编程学习笔记-纯WINAPI、纯C语言进行界面编程,不是MFC或者ATL_winapi 界面开发-CSDN博客

开始代码学习

C++ 中main函数 wmain函数 _tmain函数与WinMain函数 wWInMain函数 _tWinMain函数的区别-CSDN博客

再次坐实,该软件是Windows API界面+C底层逻辑实现,

MessageBoxEx用法:

MessageBoxEx用法-CSDN博客

一个可携带附加消息的增强消息框MessageBoxEx_C#教程_脚本之家

现在有点小思考,是系统的学一下Windows API呢,还是代码里用到啥学啥再去看再去学呢,

编译遇到的问题以及解决方法:

warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失-CSDN博客

VS2022 warning C4828: 文件包含在偏移0x处开始的字符,该字符在当前源字符集中无效(代码页)_warning c4828: 文件包含在偏移 0x60 处开始的字符,该字符在当前源字符集中无效(-CSDN博客

windows的rc资源文件

开发中

1.先做登录页面

1)rc资源添加登录页面内容(注意多语言,多个语言的资源文件里都要添加)

MFC学习笔记--模态对话框-CSDN博客

win api和MFC区别:

MFC程序及WinAPI窗口程序-CSDN博客

Openvpn-GUI功能流程

每个OpenVPN配置文件在OpenVPN GUI托盘中显示为单独的菜单项,允许您有选择地连接和断开到vpn。每次打开OpenVPN GUI菜单时,右键单击托盘里的图标,config dir将重新扫描新的配置文件。

当您选择连接到站点时,OpenVPN GUI将使用指定的配置文件启动OpenVPN。如果您使用密码短语保护的密钥,将提示您输入密码短语。

当您选择连接到站点时,OpenVPN GUI将使用指定的配置文件启动OpenVPN。如果您使用密码短语保护的密钥,将提示您输入用户名密码。

从11.34版本开始,当OpenVPN GUI退出或用户注销时,任何激活的连接都会在OpenVPN GUI重新启动时自动重新连接。

引入zlib库解压文件包

1)官网地址下载源码Index of /fossils

下载之后,用VS打开CMakeList.txt文件所在的文件夹,VS2022会解析Cmake文件,

生成-》全部重新生成,会生成对应平台(Debug)的库,参照博客:

C++ zlib库源码编译及简单使用(VS2019)_zlib库怎么用-CSDN博客

还有其他一些参考博客:

C++ zlib 压缩解压文件_zlib c++ demo-CSDN博客

使用zlib库解压文件_zlib库解压文件到目录-CSDN博客

Linux C语言 Zlib 实现解压zip文件_zlib解压-CSDN博客

存储在我的工程目录中的结构:

zlibstaticd.lib放在和生成的可执行文件同个目录下,

代码里引用头文件、库文件,

运行正常,

测试代码:

    int decompress_file()
    {
        const char* src = "Test Zlib!";
        uLong src_len = (uLong)strlen(src) + 1;
        uLong dstLen = 0x100;
        Bytef dst[0x100] = { 0 };
        int res = compress(dst, &dstLen, (const Bytef*)src, src_len);

        uLong src_ex_len = 0x100;
        char src_ex[0x100] = { 0 };
        res = uncompress((Bytef*)src_ex, &src_ex_len, dst, dstLen);
        return 1;
    }

minizip开源工具包

直接用zlib,是对数据流的操作。在Zlib项目中的contrib目录下有一个minizip子项目,minizip实际上不是zlib库的一部分,而是一个独立的开源库,用于处理ZIP压缩文件格式。它提供了对ZIP文件的创建和解压的简单接口。minizip在很多情况下与zlib一起使用,因为ZIP压缩通常使用了DEFLATE压缩算法。通过对minizip库的二次封装则可实现针对目录的压缩与解压功能。

打开

按照博客,https://bbs.csdn.net/topics/617739936

先生成zlibstat.libzlibwapi.lib两个库,

编译zlibvc提示找不到zconf.h文件 就是这么解决的 

然后生成上面两个库,然后按照博文继续,把G:\科凯达文档资料\研发相关\openvpn-GUI二次开发\zlib-1.3\contrib\minizip的minizip文件夹拷贝到当前正在做的工程项目里,创建如下路径,放到include里面


https://bbs.csdn.net/topics/617739936

程序上的改动,把minizip所在的头文件环境加进去

minizip的环境就已经添加好,可以编辑对应的代码了,

注意,要把zlibstat.libzlibwapi.lib两个库两个库拷贝到生成的应用程序所在目录下,

目前问题

目前编译还没通过呢,有错误,可能是环境哪里配置不对或者是没配置到位,猜测啊,

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号