赞
踩
20240410
记录一下事情的开始~~~
参考:
https://github.com/OpenVPN/openvpn-gui?tab=readme-ov-file#readme
openvpn-gui/BUILD.rst at master · OpenVPN/openvpn-gui · GitHub
编译器选择vs2022,同时做集成开发环境,
编程小白必看!Visual Studio 2022详细安装使用教程(C/C++编译器)-CSDN博客
组件对应关系查找:
Visual Studio 生成工具工作负载和组件 ID | Microsoft Learn
openvpn-GUI项目是用CmakeList.txt做项目管理的,
VS打开CMake工程:
遇到如下错误:
手动安装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_C#教程_脚本之家
现在有点小思考,是系统的学一下Windows API呢,还是代码里用到啥学啥再去看再去学呢,
编译遇到的问题以及解决方法:
warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失-CSDN博客
1.先做登录页面
1)rc资源添加登录页面内容(注意多语言,多个语言的资源文件里都要添加)
win api和MFC区别:
每个OpenVPN配置文件在OpenVPN GUI托盘中显示为单独的菜单项,允许您有选择地连接和断开到vpn。每次打开OpenVPN GUI菜单时,右键单击托盘里的图标,config dir将重新扫描新的配置文件。
当您选择连接到站点时,OpenVPN GUI将使用指定的配置文件启动OpenVPN。如果您使用密码短语保护的密钥,将提示您输入密码短语。
当您选择连接到站点时,OpenVPN GUI将使用指定的配置文件启动OpenVPN。如果您使用密码短语保护的密钥,将提示您输入用户名密码。
从11.34版本开始,当OpenVPN GUI退出或用户注销时,任何激活的连接都会在OpenVPN GUI重新启动时自动重新连接。
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;
}
直接用zlib,是对数据流的操作。在Zlib项目中的contrib
目录下有一个minizip
子项目,minizip实际上不是zlib
库的一部分,而是一个独立的开源库,用于处理ZIP压缩文件格式。它提供了对ZIP文件的创建和解压的简单接口。minizip在很多情况下与zlib
一起使用,因为ZIP压缩通常使用了DEFLATE
压缩算法。通过对minizip
库的二次封装则可实现针对目录的压缩与解压功能。
打开
按照博客,https://bbs.csdn.net/topics/617739936
先生成zlibstat.lib
和zlibwapi.lib两个库,
编译zlibvc提示找不到zconf.h文件 就是这么解决的
然后生成上面两个库,然后按照博文继续,把G:\科凯达文档资料\研发相关\openvpn-GUI二次开发\zlib-1.3\contrib\minizip的minizip文件夹拷贝到当前正在做的工程项目里,创建如下路径,放到include里面
https://bbs.csdn.net/topics/617739936
程序上的改动,把minizip所在的头文件环境加进去
minizip的环境就已经添加好,可以编辑对应的代码了,
注意,要把zlibstat.lib
和zlibwapi.lib两个库两个库拷贝到生成的应用程序所在目录下,
目前编译还没通过呢,有错误,可能是环境哪里配置不对或者是没配置到位,猜测啊,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。