c++语言:超长文本字符串变量,在C++中以文本文件方式加入超长文本变量并且编译到软件文件中的方法

郑鹏飞3年前C++1034

此模块为本人独自写出来的。

在软件中有可能需要一大段超长文本,编译到软件中。

普通的文本字符串,可以直接用

char *s = "字符串...";

实现,如果字符串长一点,在C++的当前的版本中,可以用

char *s = 
    "字符串...."
    "字符串...."
    ...
    "字符串...."
    "字符串...."

这样的方式生成。

但如果字符串真的很长,如果都照上面的写法,会很累,维护也很麻烦,所以大部分人的做法,可能是会把它存为一个文本文件,在需要的时候再把它读出来。

但是,如果软件是像我的VxTerm一样,执着于单文件无依赖不需要安装,如果软件发布时还需要随着附带一个文本文件,就不是我所需要的了。

那么,有没有一种方法,是可以像普通文本文件一样写入编排好的格式文件,编译时可以把它也编译进程序里呢?

为此,试了很多方法,包括尝试使用 #include ...,好像还真有人尝试通过这种方式来实现,但实在是很麻烦,就放弃了这种方法,不知道 #include的方法是否有可以成功的。


接下来分享我自己创造出来的一种:使用资源文件来实现,功能可以说非常简单,也很容易实现,还非常好用。分享给所有的人!

最终实现的方式如下:

1、在资源文件中自定义一个“XML”的资源

image.png

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

image.png

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

image.png


实现步骤:

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

image.png

然后在工程中直接编辑这个文件。

2、在资源视图中 添加资源

image.png

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

image.png

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

image.png

就可以把资源与文本文件进行绑定。

2、再把添加进去的资源定义ID改为 IDR_Txt_HomePage

image.png


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
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载请务必注明出处,尊重他人劳动成果共创和谐网络环境。

相关文章

C++第一篇:从0开始创建一个MFC程序,就可以知道MFC是怎么回事了

C++第一篇:从0开始创建一个MFC程序,就可以知道MFC是怎么回事了

1、创建一个新的Win32项目:2、添加头文件:stdafx.h// stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常更改的 /...

用C++写一个MFC程序(一):开始在窗口中添加一个按钮,并给它添加事件

用C++写一个MFC程序(一):开始在窗口中添加一个按钮,并给它添加事件

1、在MainFrm.h中定义一个按钮:2、在CMainFrm的OnCreate事件中把按钮摆出来:同时,在MainFrm.h头文件中字义一个ID_Button1运行程序,就可以看到按钮啦:接下来,要...

C++容易学习和编写、使用吗?C语言其实是一门非常非常简单的语言,简单到:它只需要你理解:“什么是C语言”,就足够了!

C++容易学习和编写、使用吗?C语言其实是一门非常非常简单的语言,简单到:它只需要你理解:“什么是C语言”,就足够了!

容易!非常容易!从实质上来说,C语言其实是一个非常非常简单的语言!我可以以C语言零基础的情况下,只需要两个月的时间,就可以用C++语言实现一个VxTerm!所以,我说它真的很简单,这个回答,应该是可以...

C++心得:CString 与 WPARAM的转换这么简单?直接把地址转换过去就可以了?

C++心得:CString 与 WPARAM的转换这么简单?直接把地址转换过去就可以了?

发送端: CString a; GetDlgItem(IDC_EDIT1)->GetWindowText(a); GetParent()->PostMessageW(...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。