不同版本的VS打开同一个项目,添加新资源,MFC在使用picture console控件之后往往会弹出这个错误:error RC2108: expected numerical dialog constant。此时,双击这个错误,会跳到提示错误的那一行,在那一行中的一串地址前插入:"Static", SS_BITMAP,?
以上是网上找到的解决办法。但是发现要手动加的地方太多了,一个一个加太麻烦了,然后想到用python写个脚本来解决。代码如下:
#*- coding:utf-8 -*
#目的:解决vs2013版本,在以前的项目增加资源后编译会出现error RC2108: expected numerical dialog constant的问题。在CONTROL行,增加"Static",SS_BITMAP
import os
import sys
import re
import time
#*.rc文件的绝对路径,比如我的是test.rc
filepath=r"E:\test\projectCode\test.rc"
def bakFile():
"""备份文件"""
os.chdir(os.path.dirname(filepath))
timestamp=time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())
sourceFile=os.path.basename(filepath)
backupFile=os.path.basename(filepath)+timestamp
cmdline='copy "{}" "{}".bak '.format(sourceFile,backupFile)
resultCode=os.system(cmdline)
if resultCode != 0:
print("备份文件失败")
return False
print("文件备份成功,备份文件位置为:{}".format(os.path.join(os.path.dirname(filepath),backupFile)))
return True
def readFile():
with open(filepath,"r")as rf:
data=rf.readlines()
return data
def writeFile(astring):
with open(filepath,"w")as wf:
wf.write(astring)
return True
def work(addString,mode):
regex_1=re.compile(" CONTROL") #匹配到要修改的行
regex_2=re.compile(addString)
data=readFile()
num=0 #修改行数计数
modify=[] #记录修改行的行号
for index,line in enumerate(data):
if regex_1.match(line):
if not regex_2.search(line): #此判断条件是防止多次运行,多次添加
if mode=="add":
tmp=line.split(",")
#if (not tmp[0].endswith('"')) and (not tmp[0].endswith('"X')):
if '"' not in tmp[0]:
print(tmp[0])
tmp.insert(2,addString)
tmpstr=",".join(tmp)
data[index]=tmpstr
modify.append(index+1)
num+=1
else:
print("行{:4}已存在,无需添加".format(index+1))
if len(modify)>0:
print("这次修改的行号依次为:",modify)
writeFile("".join(data))
print("文件:{} 修改成功".format(filepath))
print("此次修改了{}行".format(num))
def main():
if bakFile():
work('"Static",SS_BITMAP',"add")
if __name__ == "__main__":
main()
#比如,在cmd模式下,输入:python addContent.py
运行脚本,如果显示修改成功。重新打开项目即可正常编译了
|