解决VC++ MFC程序resource.h头文件中ID重复问题

2018-12-07

一般MFC开发的时候,如果有些资源是从其他工程中移植到本工程的,

而在资源移植的时候都要将对应的资源ID复制到本工程的resource.h文件中。

此时不管你在不在本工程中添加资源ID,resource.h文件中的ID可能都有重复的,一般再添加资源ID后,肯定有重复的。

可用下列代码解决此问题,将代码复制到空的win32控制台应用程序,将ressource.h拖入编译后产生可执行文件,即可解决此问题。

[cpp]view plaincopyprint?

#include

#include

#include

#include

using namespace std;

typedef struct {

string line_header;

string line_id_name;

int line_id_value;

bool ishex;//value值是16进制?

bool isdef;//是id定义字符串?

}FILE_ONE_LINE;

void handle_error(char * err)

{

cout<

system("pause");

exit(-1);

}

bool chisblank(char ch)

{

return ch == "\t" ||

ch == "\r" ||

ch == "\n" ||

ch == 32/*空格*/ ||

ch == "\0";

}

int main(int argc,char * argv[])

{

char * pfname=NULL;

if(argc>=2)

pfname = argv[1];

else

pfname = "resource.h";

ifstream is(pfname);

if(!is)

{

handle_error("ifstream:open file failed");

}

///文件读开始处理

list l;

char temp[2000];

char str[200];

while(!is.eof())

{

is.getline(temp,2000);

FILE_ONE_LINE line;

line.ishex = false;

if( temp[0] == "#" &&

temp[1] == "d" &&

temp[2] == "e" &&

temp[3] == "f" &&

temp[4] == "i" &&

temp[5] == "n" &&

temp[6] == "e" )

{

line.isdef = true;

char * p=temp;

int seg = 0;

while(1)

{

while(chisblank(*p)&&( *p == 32 ||*p == "\t"))

{

p++;

}

int i=0;

for(;!chisblank(*p);i++,p++)

{

str[i]=*p;

}

if(seg == 0)

{

str[i]="\0";

line.line_header = str;

}

else if(seg == 1)

{

for(;i<40;i++)

str[i]=" ";

str[i]="\0";

line.line_id_name = str;

}

else if(seg == 2)

{

str[i]="\0";

if(str[0] == "0" && str[1]=="x")

{

line.ishex = true;

sscanf(str,"%x",&line.line_id_value);

}

else

line.line_id_value = atoi(str);

}

seg++;

if(*p == "\n" || *p == "\0"|| seg >2)

break;

}

l.push_back(line);

//cout<

}

else

{

line.line_header = temp;

line.isdef = false;

l.push_back(line);

//cout<

}

}

if(is)

is.close();

///文件读处理完毕

int index=-1;

list::iterator it = l.begin();

for(;it != l.end();it ++)

{

if(index<0)

index = it ->line_id_value;

if(it ->line_id_value >= 100 && index

index = it ->line_id_value;

if(it ->line_id_value >= 1000 && index

index = it ->line_id_value;

if(it ->line_id_value >= 30000 && index

index = it ->line_id_value;

if(it ->isdef)

it ->line_id_value = index++;

}

///文件写开始

ofstream os(pfname);

if(!os)

{

is.close();

handle_error("ostream:Open file failed");

}

for(it = l.begin();it != l.end();it ++)

{

if(it ->isdef)

{

if(!it ->ishex)

sprintf(temp,"%d",it ->line_id_value);

else

sprintf(temp,"0x%04x",it ->line_id_value);

os<line_header<line_id_name<

}

else

{

os<line_header<

}

}

if(os)

os.close();

///文件写处理完毕

l.clear();

cout<

system("pause");

return 0;

}

_Flash

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。

http://www.pinlue.com/style/images/nopic.gif

rf中resourceid_解决VC++ MFC程序resource.h头文件中ID重复问题相关推荐

  1. 解决VC不包含stdint.h头文件问题

    stdint.h是C99的标准,主要用于统一跨平台数据定义. MSVC中不带有这个头文件,直到VS2010(新闻). 在之前的版本里面,我们可以: (1)下载这个头文件 download a MS v ...

  2. stdio.h头文件中申明的基本函数

    stdio.h头文件中申明的基本函数 调用scanf函数时,需传入变量的地址作为参数,scanf函数会等待标准输入设备(键盘等)输入数据,并且将输入的数据赋值给地址对应的变量. #include< ...

  3. 每日一题(12)—— .h头文件中ifndef/define/endif的作用

     .h头文件中ifndef/define/endif的作用? 分析: 防止头文件被重复包含. #ifndef _TEST_H_ #define _TEST_H_/* test.h */#endif / ...

  4. VC MFC程序,在About对话框中获取并显示程序的版本号

    =================================================本文为HeYuanHui原作 转载必须确保本文完整并完整保留原作者信息及本文原始链接! NN:     ...

  5. DSP2833x_Device.h头文件中关于extern cregister volatile unsigned int IFR的解释

    看源程序(TMS320F28335)的时候在main函数中看到这样一段: // Disable and clear all CPU interrupts: DINT; IER = 0x0000; IF ...

  6. math.h头文件中声明了常用的一些数学运算

    数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有: 1. 三角函数 double sin(double);正弦 double cos(double);余弦 double tan(d ...

  7. 我的探究:为什么.h头文件中不要写using namespace std

    转载于:https://www.cnblogs.com/nanlan2017/p/9179224.html

  8. C++中头文件中定义的变量

    1.在头文件.h中定义static变量,如: static int x;其实就等效于每个引用该头文件的源文件中,定义一个变量名为x的整型静态全局变量,每个文件中的x变量均属于本源文件,各文件中的互不相 ...

  9. 能不能在头文件中定义全局变量?

    首先,这是一篇科普文,所以 比较杂,我尽量写清楚一些. 1.ANSI C标准是什么?GNU又是什么?ld是什么? ANSI C是C语言的标准规范,是国际标准化组织制定的国际标准. 虽然 ANSI C规 ...

最新文章

  1. 创意留言墙图片_年会攻略2|创意合影墙、特色文化墙,有点意思启动仪式,继续玩出彩!!...
  2. A damn at han’s Windows phone book 笔记(2:Flashlight)
  3. lseek函数实现对打开文件的定位
  4. 深入探讨一下如何打断点
  5. python载入图像
  6. 控制台报错:java.lang.ClassNotFoundException: javax.xml.bind.JAXBException之解决方法
  7. SSH项目搭建-03-DAO层,Controller层创建及代码抽取
  8. xlsx模块 前端_前端使用SheetJS的xlsx.js实现excel表格生成
  9. Java项目:ssm电影院购票系统
  10. 技术储备(一):CGI介绍
  11. Python中round函数
  12. 2020-02-02
  13. 华为的全闪存存储之路
  14. enumerate用法
  15. DELL 电脑 ubuntu20.04系统安装(最新最简版)
  16. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十一)驱动进化之路:设备树的引入及简明教程
  17. 美摄SDK 局部特效接入文档
  18. Yocto开发篇 | Ubuntu构建与体验Poky发行版(Yocto 3.1版本)
  19. 相机标定(二)-畸变校正,张正友标定法
  20. OpenGL透视投影原理与实现

热门文章

  1. leetcode 423. Reconstruct Original Digits from English | 423. 从英文中重建数字(Java)
  2. 算法设计与分析:芯片测试问题、选择问题详解
  3. 看动画学算法之:doublyLinkedList
  4. 0-1 背包问题的 4 种解决方法算法策略
  5. C/C++ 指针和数组
  6. C:\Users\22981\Desktop (拒绝访问。)
  7. 【两种解法】1004 Counting Leaves (30 分)_27行代码AC
  8. python双向索引什么意思_python字典支持双向索引吗
  9. signature=8cc1e8491a741a9dc954b549013b75e5,基于小波的SAR影像纹理分析
  10. linux命令行下载github文件,Linux命令行下使用GitHub