日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SWIG异常处理

發布時間:2024/4/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SWIG异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?在native代碼中,C/C++函數能夠拋出異常或者返回錯誤代碼。SWIG通過使用這%exception預處理命令來插入異常處理代碼并轉到Java異常。異常處理代碼定義在接口文件中,如下:

$action
if (!result) {
jclass clazz = jenv->FindClass("java/lang/OutOfMemoryError");
jenv->ThrowNew(clazz, "Out of Memory");
return $null;
}

SWIGEXPORT jlong JNICALL Java_com_apress_swig_UnixJNI_getuid(JNIEnv *jenv, jclass jcls) {
jlong jresult = 0 ;
uid_t result;
(void)jenv;
(void)jcls;
{
result = (uid_t)getuid();
if (!result) {
jclass clazz = jenv->FindClass("java/lang/OutOfMemoryError");
jenv- > ThrowNew(clazz, "Out of Memory");
return 0;
}
}
jresult = (jlong)result;
return jresult;
}

這產生的Java代碼并不會改變,因為代碼正拋出一個運行時異常。如果一個檢查異常正在拋出,SwiG能夠被指導通過%javaexception預處理命令來反映,依據產生的Java函數,如下:

/* Exception handling for getuid. */
%javaexception("java.lang.IllegalAccessException") getuid {
$action
if (!result) {
jclass clazz = jenv->FindClass("java/lang/IllegalAccessException");
jenv->ThrowNew(clazz, "Illegal Access");
return $null;
}
}

這個產生的Java方法表情,能夠反映檢查的異常,如下:

package com.apress.swig;
public class Unix {
public static long getuid() throws java.lang.IllegalAccessException {
return UnixJNI.getuid();
}
}


總結

以上是生活随笔為你收集整理的SWIG异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。