Error handling C++;生成器-程序结束错误和本地化错误 我对用ActuCabeRo C++ Builder做的程序有问题。
第一部分: 我想创建一个独立的.exe文件,根据这个文件,我禁用了“链接动态RTL”和“链接运行时包”。但是,每次我结束我的程序,我得到一个错误“异常程序终止”。我对此进行了调查,找到了部分解决方案。当我启用运行时包的链接时,错误不会出现,但是.exe文件不会在没有安装C++ Builder的PC上运行,因为一些BPL文件丢失了。所以,现在,我有两种可能:一种是“异常程序终止”错误,另一种是所有电脑都没有功能性的.exe文件。除了这个错误,我的程序工作得很好 第二部分: 我用3个单元制作了一个功能齐全的程序,我想用资源DLL向导用英语翻译它。我可以预览已翻译的表单,但无法构建它,因为它显示错误,但我看不到有关错误的更多详细信息。我真的不知道怎么可能有工作程序没有错误,本地化版本有错误。我得到的建议是先“全部清理”,然后“全部构建”,但由于这个错误,我甚至不能全部清理 我真的不知道该怎么办了,我已经为这些问题挣扎了一周,我真的希望有人能帮助我。谢谢:)Error handling C++;生成器-程序结束错误和本地化错误 我对用ActuCabeRo C++ Builder做的程序有问题。,error-handling,localization,c++builder,Error Handling,Localization,C++builder,第一部分: 我想创建一个独立的.exe文件,根据这个文件,我禁用了“链接动态RTL”和“链接运行时包”。但是,每次我结束我的程序,我得到一个错误“异常程序终止”。我对此进行了调查,找到了部分解决方案。当我启用运行时包的链接时,错误不会出现,但是.exe文件不会在没有安装C++ Builder的PC上运行,因为一些BPL文件丢失了。所以,现在,我有两种可能:一种是“异常程序终止”错误,另一种是所有电脑都没有功能性的.exe文件。除了这个错误,我的程序工作得很好 第二部分: 我用3个单元制作了一个功
*.h、*.cpp、*.dfm
作为输入,并创建*.ini
文件和*.h
,读取所选语言的ini并将所有形式翻译成它(Caption,Hint,
)然后仅针对每种新语言,我复制ini并翻译字符串。这样,我可以在运行时切换语言,而无需任何DLL,或者重新启动,客户可以自行添加新语言,而无需源代码或编程技能
但是,无法共享代码,因为它使用我的一些不可共享(公司)LIB来访问字符串、动态列表和快速ini文件(它们包含在55 KB的估计值中),但我可以共享可执行文件(win32 standalone在BDS2006中编译,用于VCL BDS2006代码格式化):
\ifndef\u ini\u h
#定义_ini_h
类文件
{
公众:
AnsiString节,文件名;
//内联
InFile(){close();}
inifile(inifile&a){*this=a;}
~ini文件(){close();}
inifile*运算符=(常量inifile*a){*this=*a;返回this;}
//inifile*运算符=(常量inifile&a){…复制…返回此;}
int open(AnsiString name)//打开ini文件
{
close();
如果(FileExists(name)){filename=name;返回1;}
返回0;
}
void close()//关闭ini文件
{
filename=“”;
第“”节;
}
int sec_getid(const AnsiString&sec,bool _add)//选择要忽略返回ID的节
{
截面=秒;
返回0;
}
AnsiString key\u get(int section\u id,const AnsiString&key,const AnsiString&def)//使用默认值从ini部分读取密钥
{
如果(文件名==“”)返回def;
char dest[1024];AnsiString val;
GetPrivateProfileString(section.c_str()、key.c_str()、def.c_str()、dest、1024、filename.c_str());
val=dest;返回val;
}
};
#恩迪夫
因此,该应用程序有3个文件夹:
*.h、*.cpp;*.dfm
文件放在此处。*.h
的解析将在public:(跳过用户声明)
上停止,以防止与用户代码冲突。您还可以在组件行末尾添加注释:
//语言\u跳过\u CAPT
//语言跳过文本
//语言\u跳过\u提示
或者任何阻止翻译的组合都会弄乱它
*。包含内部消息的cpp
源文件\u要翻译的消息[]
必须使用注释中的标记进行正确编码,如下所示:
if (Form1->Visible) language_init(ExtractFilePath(Application->ExeName)+"english.ini");
AnsiString\u消息[\u msg\u enum\u end+1]=
{
//语言\u MSG000\u文本\u BEG
“错误:消息id超出范围!!!”,
“缺少OpenGL FBO支持!!!…切换到简化图形”,
“缺少OpenGL VBO支持!!!…切换到简化图形”,
“抱歉:检测到ATI图形卡!!!…切换到简化图形”,
“抱歉:检测到ATI Radeon HD 5450图形卡!!!…禁用预览功能”,
“完成。”,
//语言\u MSG000\u文本\u结束
"",
""
};
- init.h可以忽略这一点,它只是窗口状态的初始化/退出加载/行程
- init.iniinit的ini文件可以忽略这一点 进入应用程序ini
- 语言。h这是您想要的,这是翻译程序
- english.ini使用当前窗口文本翻译ini文件
语言.h
的示例:
#包括
#包括“ini.h”//使用上面的ini.h
void language_init(解析名称)
{
国际秒;
ini文件ini;
ini.open(名称);
sec=ini.sec\u getid(“双编辑器