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"); } //---------------------------------------------------------------------------