【转】遇到 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