借助WDK7.1让高版本VC生成的可执行文件不依赖msvcrtXX.dll

高版本VS链接到msvcrt.lib

上一篇中介绍的方法适用面并不广,毕竟C++有着一大堆的优良特性和类库,比如STL、boost、MFC和QT等等,在普通的开发中只使用Win32API确实有点苦行僧的感觉。下面我们就尝试使用高版本的VC++生成可以链接到msvcrt.dll的程序。众所周知,要想让程序链接到msvcrt.dll,需要合适的msvcrt.lib,而高版本VS自带的msvcrt.lib默认会链接到自己的crt库的Dll导致依赖问题。好在经过探索,发现WDK7.1中提供了一套切实可行的解决方案。

WDK7.1

WDK7.1是微软提供的驱动程序开发包,匹配的目标平台是Win7 SP1。但其中包含了完整的头文件、库文件和编译链接器,也可以用于编写用户程序。最为重要的是,其中有我们需要的msvcrt.lib。在这里,我们只需要其中的inc和lib两个文件夹下的文件,前者是WDK提供的头文件路径,后者是动态库路径,其中包含了Win32API、C库、MFC库和C++的库。

​ 下载WDK7.1请移步https://www.microsoft.com/en-us/download/details.aspx?id=11800,下载安装过程在此按下不表。需要说明的是,我们只需要WDK安装路径下的inc和lib两个文件夹中的部分文件,所以安装后可以备份一下对应内容,以后就可以直接用对应文件夹中的文件而不必再次安装。

测试代码

下面,我们以这样一段程序为例,看看在VS2017下如何生成链接到msvcrt.dll的程序:

#include <windows.h>
#include <stdio.h>
#include <vector>
#include <iostream>
#include <exception>
using namespace std;

int main()
{
    try
    {
        vector<int> vInput(10, 3);
        cin >> vInput[4];
        for (auto itr = vInput.begin(); itr != vInput.end(); itr++)
        {
            cout << (*itr) << endl;
        }
        throw new exception("Hehe");
    }
    catch (exception* e)
    {
        cout << e->what() << endl;
        MessageBox(NULL, TEXT("Hello world"), TEXT("Hello world"
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值