2008-09-08 11 views
30

क्या किसी के पास जावा एप्लिकेशन में कुछ सी # कोड को एकीकृत करने के लिए कोई अच्छा समाधान है?जावा से कॉलिंग सी # कोड?

कोड छोटा है, इसलिए मैं जावा में फिर से लिख सकता हूं, लेकिन अगर संभव हो तो मैं कोड का पुन: उपयोग करूंगा। अपने आप को दोहराना न करें, आदि

इसके अलावा, मुझे पता है कि मैं सी # को वेब सेवा या जो भी हो, के रूप में बेनकाब कर सकता हूं, लेकिन इसमें कुछ सुरक्षा/एन्क्रिप्शन चीजें हैं, इसलिए यदि संभव हो तो मैं इसे कसकर एकीकृत कर दूंगा।


संपादित करें: यह सर्वर-आधारित ऐप पर होगा, इसलिए एक और रनटाइम "डाउनलोड करना" अप्रासंगिक है।

+0

यदि इसका सर्वर आधारित है, तो प्लेटफॉर्म क्या है? मुझे नहीं पता कि कॉम इंटरऑप जैसी चीजें मोनो के साथ कितनी अच्छी तरह काम करती हैं, इसलिए यह विचार करने का एक और कारक है। – FlySwat

उत्तर

4

जावा बाईटकोड संकलक GrassHopper जो उपयोग की आप के लिए हो सकता है के लिए एक आईएल नहीं है। मैंने कभी कोशिश नहीं की है।

मैं हालांकि

संपादित करें जावा में अपने कोड को फिर से लिखने को देखो चाहते हैं: ध्यान दें कि टिड्डी अब उपलब्ध नहीं हो रहा है।

+0

घास हॉपर लिंक टूटा हुआ है। –

+0

शायद –

7

यदि यह छोटा है, तो मुझे लगता है कि आप जावा में कोड को फिर से लिखने से बेहतर हैं। एक 50 एमबी रनटाइम डाउनलोड करना काफी खराब है।

0

यदि यह बहुत अधिक परेशानी नहीं है तो मैं इसे फिर से लिखूंगा। वेब सेवा काम करेगी, लेकिन ऐसा लगता है कि थोड़ा कोड पुनः उपयोग करने के लिए बहुत अधिक ओवरहेड होगा।

26

आप अपने मूल कोड को डीएलएल में संकलित करने के लिए जावा नेटिव इंटरफेस का उपयोग करेंगे।

यदि इसकी सी # की एक छोटी राशि है, तो इसे जावा पर पोर्ट करना अधिक आसान होगा। यदि यह बहुत है, तो यह करने का एक अच्छा तरीका हो सकता है।

यहाँ इसके बारे में एक highlevel सिंहावलोकन है:

http://en.wikipedia.org/wiki/Java_Native_Interface

आपका दूसरा विकल्प सी # कोड से एक COM विधानसभा बनाने और इसे लागू करने की जे-इंटरॉप उपयोग करने के लिए किया जाएगा।

http://sourceforge.net/projects/j-interop/

2

आप एक Inter-process communication के रूप में यह hadle पुनर्लेखन और चयन करने के लिए निम्न में से एक नहीं करना चाहते हैं:

  • नाम पाइप
  • सॉकेट
  • सोप
3

हम इस के लिए JNBridge इस्तेमाल किया, और यह बहुत अच्छा काम किया। यह जावा -> .NET और इसके विपरीत, सभी इन-प्रो को संभालता है।

+1

हां उपलब्ध नहीं है, यह एक वाणिज्यिक उत्पाद है। – Barton

0

http://www.infoq.com/articles/in-process-java-net-integration उसी प्रक्रिया स्थान में सीएलआर और जेवीएम चलाने और आगे और आगे कॉल करने का सुझाव देता है। यह बहुत ही कुशल लगता है। मैं इसे एक कोशिश देने जा रहा हूं और इसे Jace में एकीकृत करता हूं यदि यह अच्छी तरह से काम करता है।

16

मैं jni4net के लेखक हूं, जेवीएम और सीएलआर के बीच ओपन सोर्स इंट्राप्रोसेस ब्रिज। यह जेएनआई और पीइवोक के शीर्ष पर बना है। कोई सी/सी ++ कोड की आवश्यकता नहीं है। मुझे आशा है कि यह आपकी मदद करेगा।

+0

यह बहुत अच्छा लग रहा है, क्या आपको कभी लिनक्स और विंडोज दोनों का समर्थन करने का कोई तरीका मिला? – Manius

0

यदि यह कोड का एक टुकड़ा है जो कमांड लाइन उपयोगिता के रूप में एक्सपोज़ेबल है, तो मैं अन्य होस्ट भाषा को उपयोगिता निष्पादित करने के लिए सिस्टम कॉल का उपयोग करता हूं।

यदि आपके सी # ऐप को जावा कॉल करने की आवश्यकता है, तो एक विशेष जावा मुख्य संकलित करें जो उपयुक्त कमांड लाइन तर्क लेता है और टेक्स्ट आउटपुट देता है।

यह सबसे पुराना, सरल तरीका है।

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