本文共 1441 字,大约阅读时间需要 4 分钟。
如何在软件.exe中嵌入语言资源呢。常规的想法是, 将语言字符串放到一个文件中, 然后在程序中去读取。 然而这样做存在一个问题: 最后发布的.exe必须依赖于语言字符串文件, 比如lang.txt. 于是, 我们想, 能不能把这些字符串通过某种方式嵌入到.exe中呢? 这样, 在发布程序的时候, 就不用管语言资源了。
当然可以, 且看步骤:
1. 建立一个C++ Builder工程, 顺便画出控件布局。
2. 在当前目录下添加资源文件lang_ch.rc和lang_en.rc, 并且要添加到工程中, 便于编译生成应用程序需要的lang_ch.res和lang_en.res. 发布.exe程序的时候, 不需要发布lang_ch.res和lang_en.res, 因为他们已经内嵌在.exe中。
3. 写如下代码, 然后编译连接, 运行。
代码如下:
//---------------------------------------------------------------------------#include资源文件lang_ch.rc和lang_en.rc如下:#pragma hdrstop#include "Unit1.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TForm1 *Form1;//---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){ Label1->Caption = LoadStr(1); // LoadStr是系统库函数, 此时, 从嵌入.exe中的lang_ch.res中读取字符串 Label2->Caption = LoadStr(2);}//---------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender){ Label1->Caption = LoadStr(101); Label2->Caption = LoadStr(102);}//---------------------------------------------------------------------------
STRINGTABLEBEGIN1 "姓名:"2 "学号:"END
STRINGTABLEBEGIN101 "Name:"102 "ID:"END
编译连接运行后, 程序可实现双语切换: