swig java c_通过SWIG处理Java中的C ++异常

我正在尝试使用SWIG将C 类包装到Java类中。此类C类具有引发异常的方法。

我有三个目标,尽管据我所知遵循了手册,但目前没有一个目标:

要使Java类throws 在C ++中引发的方法上声明

要获取SWIG生成的Exception类以进行扩展 java.lang.Exception

Exception.getMessage()在生成的SWIG类中重写。

似乎问题的根源似乎typemap没有应用我的,因为以上均未发生。我做错了什么?

最小的示例如下。C

++不必编译,我只对生成的Java感兴趣。异常的类无关紧要,并且下面的代码使用IOException仅仅是因为文档中使用了它。所有代码均从此处的示例改编而成:

C ++头文件(test.h):

#include

class CustomException {

private:

std::string message;

public:

CustomException(const std::string& message) : message(msg) {}

~CustomException() {}

std::string what() {

return message;

}

};

class Test {

public:

Test() {}

~Test() {}

void something() throw(CustomException) {};

};

SWIG .i文件:

%module TestModule

%{

#include "test.h"

%}

%include "std_string.i" // for std::string typemaps

%include "test.h"

// Allow C++ exceptions to be handled in Java

%typemap(throws, throws="java.io.IOException") CustomException {

jclass excep = jenv->FindClass("java/io/IOException");

if (excep)

jenv->ThrowNew(excep, $1.what());

return $null;

}

// Force the CustomException Java class to extend java.lang.Exception

%typemap(javabase) CustomException "java.lang.Exception";

// Override getMessage()

%typemap(javacode) CustomException %{

public String getMessage() {

return what();

}

%}

swig -c++ -verbose -java test.i与SWIG 2.0.4

一起运行时,异常类不会扩展,java.lang.Exception并且所有Java方法都没有throws声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值