2010-01-14 18 views
7

मैं एक विरासत जावा एप्लिकेशन को बनाए रखता हूं जो एमएस वीबीए और एमएस वर्ड के COM इंटरफेस के माध्यम से कॉल करने के लिए Jacob, या जावा-COM ब्रिज का उपयोग करता है। मैं सूर्य से com4j देख रहा हूं, और यह आशाजनक प्रतीत होता है।com4j बनाम jacob जावा से COM विधियों को कॉल करने के लिए

कारण यह मेरे लिए अच्छा लगता है कि यह IDISpatch के बजाय विधियों के लिए vtable बाध्यकारी का उपयोग करता है। सभी COM ऑब्जेक्ट्स को मानते हुए हम वर्तमान vtable इंटरफेस में हेरफेर करते हैं, यह IDISpatch के बजाय उनका उपयोग करने के लिए क्लीनर लगता है। उन दिनों में जब COM और CORBA जहां गर्म बाइनरी इंटरफ़ेस प्रौद्योगिकियां, मुझे याद है कि vtable के माध्यम से प्रारंभिक बाध्यकारी IDISpatch के माध्यम से देर से बाध्यकारी से बेहतर प्रदर्शन देता है।

क्या कोई भी जैकब से com4j पर माइग्रेट हो गया है? यदि हां, तो क्या नुकसान और सबक सीखे थे?

उत्तर

13

मैंने एक साधारण COM ऑब्जेक्ट के खिलाफ एकीकरण के दौरान जैकब और कॉम 4j दोनों का उपयोग किया है। मैं मुख्य रूप से कॉम 4j के साथ जा रहा था क्योंकि याकूब ने बहुत अधिक स्मृति लीक की थी। जैकब की तुलना में, मुझे लगता है कि स्थापित होने के बाद कॉम 4j अधिक सीधे आगे था। अगर मुझे सही याद है, तो वास्तविक COM कॉल करने से पहले याकूब को और अधिक सेटिंग और टाइपिंग की आवश्यकता थी। कॉम 4j में आप केवल प्रदत्त फैक्ट्री का उपयोग करेंगे।

कॉम 4j हमारे लिए ठीक काम कर रहा है, लेकिन हमने रास्ते पर कुछ टक्कर मार दी हैं। सबसे पहले, जेनरेट किए गए इंटरफेस सही ढंग से जेनरेट नहीं किए गए थे और हमें उन्हें मैन्युअल रूप से ट्विक करने की आवश्यकता थी। मुझे याद रखने वाली मुख्य समस्या यह थी कि हमें ठीक से काम करने के लिए @ReturnValue एनोटेशन नहीं मिला। इसके अलावा, हमें @VTID गणना मैन्युअल रूप से सही करने की आवश्यकता है।

हमें सामना करने वाली एक और प्रमुख बात यह थी कि हम short एस के लिए Holder (आउट पैरा) कक्षा का उपयोग नहीं कर सके। हम कॉम 4j में कोई भी बदलाव करने के बजाय इंटेगर से शॉर्ट में परिवर्तित डेल्फी रैपर बनाने के लिए समाप्त हो गए।

अंत में, मुझे याद है कि मैं एकीकृत होने पर परियोजना की स्थिति के बारे में थोड़ा चिंतित था। ऐसा कोई नियमित अपडेट नहीं लगता है (अंतिम रखरखाव रिलीज के बाद अब दो साल)।

+1

धन्यवाद। मैं विवरण प्रदान किए बिना जैकब मेमोरी-रिसाव में नहीं जाना चाहता था, लेकिन हमने इसे भी देखा है। मुझे लगता है कि मैं com4j के साथ एक प्रदर्शन प्रोजेक्ट करूंगा, और एक याकूब के साथ, और मतभेदों का पहला अनुभव अनुभव करूंगा। –

+0

मैं com4j से jacob पर जाने के लिए देख रहा हूं क्योंकि दुर्भाग्य से com4j केवल 64 बिट जावा के साथ काम करता है 64 बिट जावा नहीं, इसलिए पानी में आगे मृत में लगता है। –

+0

@PaulTaylor com4j द्वारा टिप्पणी के अपडेट के रूप में [64-बिट जावा समर्थन के साथ अपडेट किया गया है] (http://kohsuke.org/2012/04/27/com4j-updates/)। –

0

हालांकि यह एक बहुत पुराना सवाल है, लेकिन मैं कॉम 4j का उपयोग करने के लिए नए लोगों की भी सिफारिश करता हूं क्योंकि यह अधिक स्थिर है, इसमें एक सक्रिय समुदाय है और यहां तक ​​कि आपके जावा कक्षाएं उत्पन्न करने के लिए एक मेवेन प्लग-इन भी है। लेकिन आप "जे-इंटरऑप" को भी देखना चाहते हैं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^