独钓寒江雪

用C++的优雅,驯服Windows的狂野

C++自 C++11 起支持 static_assert 编译时断言,如:

1
2
static_assert ( bool_constexpr , message )		(C++11 起)
static_assert ( bool_constexpr ) (C++17 起)

如果编译器不支持 C++11(经测试 VS2010 已经支持static_assert),我们可以使用下面方式来实现编译断言:

1
#define COMPILE_ASSERT(expression) switch (0) {case 0: case expression:;}

使用方法:

1
COMPILE_ASSERT(1 != 1);

上述方式虽然能实现编译断言,但缺点也很明显:

  • 错误提示信息的可读性较差;
  • 表达式必须是一个编译期常量表达式;
  • 无法使用在模板元编程中。

强烈建议拥抱新标准,使用 static_assert,做一个开心的人!

运行时库(Runtime library)通俗的说就是我们的程序运行的时候所依赖的库文件。在 Windows 平台,这些库由微软提供,称之为 Visual C++ 运行时库,虽然叫 C++ 运行时库,但也包含了 C 运行时库。

这些库以两种形式被提供:静态库(lib)动态库(lib + dll),每个库还分别提供了 Debug 和 Release 两个版本。

阅读全文 »

常见图形编程接口

我们常见的图形编程接口主要分为如下派系:

  1. OpenGL
  2. DirectX
  3. Vulkan
  4. Metal

下图展示了各个派系的分支及特点:

阅读全文 »

前面的几篇文章介绍了 NSIS 的传统界面的安装包和现代界面的安装包的制作方法,也提到了 NSIS 支持自定义页面(即使用page custom)的特性,自定义页面需要用户自己创建对话框、控件、添加控件响应等等,虽然 NSIS 提供了nsDialogs.nsh来支持这些功能,但使用起来还是不太方便(需要专门了解这个插件诸多用法),而且不够灵活,所以本文介绍一种终极的自定义界面的安装包解决方案,即完全使用第三方界面库来绘制安装包界面。

该方案是对界面库没有限制的,可以使用其他任何界面库,如 MFC, Qt,WTL 等。通过这种方案可以很轻松的实现类似金山毒霸、QQ、360 安全卫士等软件的安装包界面。

阅读全文 »

NSIS 内置了很多指令,这些指令可以满足我们基本需求,但难免会遇到 NSIS 没有内置的功能,如进程操作,后台运行(即多线程),7z 压缩等等,这个时候我们就需要借助第三方插件来满足我们所需要的功能了。

阅读全文 »
0%