c++语言:超长文本字符串变量,在C++中以文本文件方式加入超长文本变量并且编译到软件文件中的方法
此模块为本人独自写出来的。
在软件中有可能需要一大段超长文本,编译到软件中。
普通的文本字符串,可以直接用
char *s = "字符串...";
实现,如果字符串长一点,在C++的当前的版本中,可以用
char *s = "字符串...." "字符串...." ... "字符串...." "字符串...."
这样的方式生成。
但如果字符串真的很长,如果都照上面的写法,会很累,维护也很麻烦,所以大部分人的做法,可能是会把它存为一个文本文件,在需要的时候再把它读出来。
但是,如果软件是像我的VxTerm一样,执着于单文件无依赖不需要安装,如果软件发布时还需要随着附带一个文本文件,就不是我所需要的了。
那么,有没有一种方法,是可以像普通文本文件一样写入编排好的格式文件,编译时可以把它也编译进程序里呢?
为此,试了很多方法,包括尝试使用 #include ...,好像还真有人尝试通过这种方式来实现,但实在是很麻烦,就放弃了这种方法,不知道 #include的方法是否有可以成功的。
接下来分享我自己创造出来的一种:使用资源文件来实现,功能可以说非常简单,也很容易实现,还非常好用。分享给所有的人!
最终实现的方式如下:
1、在资源文件中自定义一个“XML”的资源

2、双击打开指定资源时,实际上会打开一个绑定的 文本文件

3、直接编辑这个文本文件,完成后重新编译程序,就可以了:

实现步骤:
1、先在工程中添加一个 homepage.txt 文本文件:

然后在工程中直接编辑这个文件。
2、在资源视图中 添加资源

在添加资源界面中选择“导入”

选择后,输入一个自定义类型,确定。

就可以把资源与文本文件进行绑定。
2、再把添加进去的资源定义ID改为 IDR_Txt_HomePage

3、接下来就需要把这个资源读入字符串中:
(1)定义一个全局可以访问的函数:
头文件定义:
string xPub_LoadstringFromXMLResource(long id_IDR, CString ResourceName = L"XML");
.cpp中函数实现:
string xPub_LoadstringFromXMLResource(long id_IDR, CString ResourceName)
{
HRSRC hRes;
hRes = FindResource(AfxGetInstanceHandle(), MAKEINTRESOURCE(id_IDR), ResourceName);
if (!hRes)
return "";
HGLOBAL hResLoad = LoadResource(AfxGetInstanceHandle(), hRes);
LPVOID pRes = LockResource(hResLoad);
DWORD dwResSize = SizeofResource(NULL, hRes);
char* pp = (char*)hResLoad;
return string(pp, dwResSize);
}由于是在C++中,并且我使用了string做为字符串承载体。如果不喜欢用这个string,可以考虑自己想办法把hResLoad实例化到内存中,并且中const char*对它做指向后返回该指针。
(2)使用时:
string s = xPub_LoadstringFromXMLResource(IDR_Txt_HomePage);
变量s就是所需要的字符串了。
转载请注明 : 文章转载自不了阁-飞哥 blog.forbs.cn
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载请务必注明出处,尊重他人劳动成果共创和谐网络环境。



