小要饭 2015-01-15 08:21 采纳率: 0%
浏览 1316

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"处.

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

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-05-27 00:06
    关注

    该回答引用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开发相关文档,以获取更详细的信息和示例代码。

    评论

报告相同问题?

悬赏问题

  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统