1、安装一个补丁包后重新编译源程序。参见:http://www.respower.com/~earlye/programming/TranslateStandardExceptions.htm
压缩包下载地址:http://files.cnblogs.com/zhujiecode/TranslateStandardExceptions.zip
2、修改注册表:
假设出错的应用程序名为“Project1.exe”,打开注册表,找到如下主键:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options]
新建一个“Project1.exe”项,然后再其下创建一个字符串值,键值名为“DisableHeapLookAside”,内容设为“1”即可(有时候留空也有效)。
上面两种方法只试过了第一种,程序脱离IDE运行没有再出现这个错误。但偶尔在IDE中运行还是会弹出这个错误(例如ShellExecute函数经常会弹出这个错误)。
对于“External Exception EEFFACE”这个错误产生的原因在于---bcb采用的vcl库是由pascal语言写的,当C++代码产生的异常对象不是vcl提供的Exception类的子类对象时,就会报出这个错误。可以新建工程将下面代码测试一遍就会发现这个问题。
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; class MyException1 { public: MyException1(AnsiString msg){Message=msg;} public: AnsiString Message; }; class MyException2:public Exception { public: MyException2(AnsiString msg):Exception(msg){Message=msg;} public: AnsiString Message; }; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { throw MyException1("test1"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { throw MyException2("test2"); } //---------------------------------------------------------------------------