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

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

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

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

C

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

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

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)定义一个全局可以访问的函数:

C++

头文件定义:

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)使用时:

C++

	string s = xPub_LoadstringFromXMLResource(IDR_Txt_HomePage);

变量s就是所需要的字符串了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不了阁-飞哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值