我們正在實施暴露於Java客戶端的C++代碼的包裝。我已經看到了SWIG documents about exception handling,但是這在三層(C++/SWIG/Java)中的編碼方面轉化爲什麼?如何通過SWIG處理來自C++異常到Java
如果任何人有工作示例(S)或建議,我將不勝感激。
我們正在實施暴露於Java客戶端的C++代碼的包裝。我已經看到了SWIG documents about exception handling,但是這在三層(C++/SWIG/Java)中的編碼方面轉化爲什麼?如何通過SWIG處理來自C++異常到Java
如果任何人有工作示例(S)或建議,我將不勝感激。
自從我這個糾結(見我的個人資料我的博客,這是對蟒蛇,SWIG,例外和董事,但應該幫助)讓我給你的建議幾塊:
const char
指針,Java可以選擇垃圾收集它們。所有項目都是如此,但這是一個容易被忽視的項目,我已經完成了它,並且已經完成了幾次。之後,不讀1.1。使用2.0或1.3的文檔。這更清楚。
又見痛飲2.0文檔此Java-specific section on exception handling英寸
避免編寫模式不止一次,我創建了一大口宏支持拋出一個類型C++異常的方法 - 通過抓住這一點,拋出一個相應的Java異常:
WRAP_THROW_EXCEPTION(myCppDeclaration, com::foo::MyCppExceptionClass,
"com.foo.MyException",
"com/foo/MyException");
這裏的宏:
%define WRAP_THROW_EXCEPTION(MATCH, CPPTYPE, JTYPE, JNITYPE)
%javaexception(JTYPE) MATCH {
try {
$action
}
catch (CPPTYPE & e) {
jclass eclass = jenv->FindClass(JNITYPE);
if (eclass) {
jenv->ThrowNew(eclass, e.what());
}
}
}
%enddef
感謝您的指點Andy – 2010-11-11 18:45:18
不客氣!我知道你的問題已經過去了幾個月,但我想爲未來的讀者添加這個問題。 – 2010-11-11 22:05:36
我真的很感激的具體反饋。恭喜你,你顯然是這個話題的全球專家。 – 2010-11-09 15:18:52
@Steve Townsend哈哈,不!我剛剛使用了Python和Java的SWIG。我也碰巧寫下了我與他人的經歷,以便他們能夠受益/分享我的痛苦。 – wheaties 2010-11-09 16:01:40
謝謝你。 – JamesC 2011-12-06 16:36:53