• Windows编程技术之资源释放


    前言

    为了简化程序文件多且杂,可将部分文件如dll文件、资源文件(文本文件、图片文件等)等作为资源插入到程序中。等程序运行时,再在本地生成资源文件或者释放到本地。
    如果进行了上述操作,只需要将程序在编译后,只需要一个exe文件即可正常运行,运行.exe文件后,本地会自动生成需要的资源文件。


    实现
    #define _CRT_SECURE_NO_WARNINGS
    #define _CRT_NON_CONFORMING_SWPRINTFS
    #include
    #include
    #include"resource.h"
    using namespace std;
    int main()
    {
    	//获取指定模块的资源
    	HRSRC src = FindResource(NULL, MAKEINTRESOURCE(IDR_MYRESOURCE2), L"MYRESOURCE");
    	if (src == NULL){
    		cout << "FindResource Failed!" << endl;
    		return FALSE;
    	}
    	//获取资源大小
    	DWORD size = SizeofResource(NULL, src);
    	if (size <= 0){
    		cout << "SizeofResource Failed!" << endl;
    		return FALSE;
    	}
    	//将资源加载到内存
    	HGLOBAL globslm = LoadResource(NULL, src);
    	if (globslm == NULL){
    		cout << "LoadResource Failed!" << endl;
    		return FALSE;
    	}
    	//锁定资源
    	LPVOID msrc = LockResource(globslm);
    	if (msrc == NULL){
    		cout << "LockResource Failed!" << endl;
    		return FALSE;
    	}
    	//将资源保存为文件
    	FILE* fp = NULL;
    	fopen_s(&fp, "test1_.txt", "wb+");//打开一个文件/创建新文件
    	if (fp == NULL){
    		cout << "LockResource Failed!" << endl;
    		return FALSE;
    	}
    	fwrite(msrc, sizeof(char), size, fp);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    经过运行,程序未出现BUG,其中中用到的四个函数为windows提供的api,详细功能可直接百度,不予多述。


    问题

    资源文件可能被编译到哪了呢?
    到目前为止,上述代码的实现是将资源文件“直接放入”了.exe文件中。当然,也存在放入dll文件中的情况,但博主未遇到或者如何进一步加载到dll文件尚待研究。

  • 相关阅读:
    【python】如何注释
    低代码PaaS开发平台
    【C++】string类的使用,小试牛刀
    【开发篇】十一、SpringBoot缓存底层实现技术的切换为Ehcache、Redis、Memcached
    windows python安装
    c++23中的新功能之七三个新的扩展
    数智创新时代,有生态才有未来
    1分钟轻松解决php处理浮点型运算精度问题
    单调栈!!!
    SpringCloud - Spring Cloud Netflix 之 Zuul网关;路由(十一)
  • 原文地址:https://blog.csdn.net/qq_44116998/article/details/127682054