【轉】遇到 External Exception EEFFACE 錯誤的解決辦法


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM