C++ Builder XE7 开发 Android 应用时关于异常捕获的问题.

代码如下:
//-----------------------------------------------------------------
void __fastcall xxxx()
{
try{
int x=0; int y=0;
y = x / y;
}
catch(...){ShowMessage("Error!");return;}
ShowMessage("ok!");
}
//-----------------------------------------------------------------
以上代码编译成win32应用后,是可以捕获到异常的.不会执行到 "ok"处.
但编译成Android应用后,catch部分似乎失效.总是执行到"ok"处.

请各位牛人 高人 大师指点啊!

该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

在C++ Builder XE7中开发Android应用时,异常处理有一些特殊的考虑因素。Android使用的是Java虚拟机(JVM),而不是Windows下的C++运行时环境。因此,C++异常在Android应用中的处理方式略有不同。


在你提供的代码中,异常处理部分使用了catch(...)来捕获所有类型的异常。然而,在Android应用中,可能需要对特定类型的异常进行捕获和处理,而不是使用通用的catch(...)


在你的示例代码中,由于除以0的错误(即"y = x / y")引发了一个除以零的异常,但是这个异常可能并不会被catch(...)捕获到。


为了在Android应用中正确地捕获异常并执行相应的处理代码,你可以尝试使用以下方法:

  1. 指定特定的异常类型:将catch(...)更改为捕获具体的异常类型,例如catch(const std::exception& ex)。这样可以确保捕获到特定类型的异常并进行处理。

    代码示例:

    void __fastcall xxxx()
    {
        try {
            int x = 0; int y = 0;
            y = x / y;
        }
        catch (const std::exception& ex) {
            ShowMessage("Error!");
            return;
        }
        ShowMessage("ok!");
    }
    
  2. 在Android应用中,你还可以使用Java异常处理机制来处理异常。通过使用try-catch块,可以在C++代码中抛出一个Java异常,然后在Java层面进行处理。

    代码示例:

    #include <jni.h>
    
    extern "C" {
        JNIEXPORT void JNICALL Java_com_example_MyActivity_xxxx(JNIEnv* env, jobject obj)
        {
            try {
                int x = 0; int y = 0;
                y = x / y;
            }
            catch (...) {
                jclass exceptionClass = env->FindClass("java/lang/Exception");
                env->ThrowNew(exceptionClass, "Error!");
                return;
            }
            ShowMessage("ok!");
        }
    }
    

请注意,以上示例代码仅为指导性示例,具体实现可能需要根据你的实际情况进行调整。此外,还建议查阅C++ Builder XE7的文档和Android开发相关文档,以获取更详细的信息和示例代码。