2009-05-28 10 views
6

में मोनो एम्बेड करना क्या कोई डेल्फी Win32 एप्लिकेशन में मोनो रनटाइम को एम्बेड करने के तरीके के बारे में बताता है? Win32 पर्यावरण (www.mono-project.com/Embedding_Mono) के संबंध में आधिकारिक दस्तावेज बहुत उपयोगी नहीं हैं।डेल्फी Win32

अद्यतन:

मैं डेल्फी में स्थिर जोड़ने की अनियमितता से परिचित हूँ और एक DLL के साथ पूरी तरह खुशी होगी। मोनो की निर्भरताएं हैं इसलिए एक और डीएलएल वास्तव में कोई बड़ा सौदा नहीं है। एफपीयू नियंत्रण शब्द के बारे में टिप्पणी मेरी चिंताओं में से एक है क्योंकि मेरा मानना ​​है कि सीजी डिफ़ॉल्ट सेटिंग्स माइक्रोसॉफ्ट टूल्स से अलग हैं। यहाँ मैं क्या मानना ​​है कि जरूरत है: (? मोनो प्रयोग करने योग्य के साथ भेज दिया है) 'सी' से

  • हैडर अनुवाद डेल्फी (शायद नहीं बहुत कठिन)
  • मोनो DLL का संकलन करने के लिए
  • एक एफपीयू नियंत्रण शब्द goctha के (उम्मीद कोई नहीं) की बेहतर समझ के
  • कोई इस स्टंट कोशिश कर से लड़ाई निशान हैं कि से कुछ प्रतिक्रिया;)

अद्यतन (2011/06/12):

मामले में किसी को भी रुचि रखते हैं, मैं तो बस गूगल कोड पर एक परियोजना एक डेल्फी आवेदन में मोनो एम्बेड करने के लिए पाया जाता है:

monoemb4delphi

उत्तर

6

मोनो मिंगव के साथ बिल्ड करने योग्य प्रतीत होता है, हालांकि अधिकांश संदर्भ मुझे लिनक्स से क्रॉसकंपल्ड मिला है, उदाहरण के लिए http://www.mono-project.com/Cross-compiling_Mono_for_Windows

मैं कहता हूँ कि आपके द्वारा पहली प्राथमिकता एक libmono dll कि

  • cygwin का उपयोग नहीं करता लिए खोज रहा है (मुझ पर भरोसा)
  • काम करने के लिए जाना जाता है, भी बाहर MinGW (संभव MinGW विशिष्ट बचने सी ++ मैंगलिंग अगर सी ++ का उपयोग किया जाता है)
  • अधिमानतः एक पठनीय शीर्षलेख के साथ आता है।

यदि आप इसे डीएलएल (मागी की सही टिप्पणी को पूरा करने के लिए) के रूप में पाते हैं या इसे बनाते हैं, तो एक हेडर लिखें (जैसे स्टाजन सुझाव देता है) यह काम कर सकता है।

हालांकि यह मामूली नहीं होगा, वीएम बिल्कुल तुच्छ जानवर नहीं हैं, और सामान्य क्रॉस-भाषा समस्या डोमेन में समस्याएं अपेक्षित हैं: लाइब्रेरी प्रारंभिकरण (ऑर्डर), एफपीयू अपवाद मास्क और सामान्य रूप से अपवाद हैंडलिंग। आंशिक रूप से यही कारण है कि मैंने कहा कि "मिंगव के बाहर काम करने के बारे में पता है", यह अध्ययन कर रहा है कि यह अन्य कंपाइलर्स में कैसे इंटरफेस किया गया है, यह संकेत दे सकता है कि इसे ठीक से कैसे निपटाना है।

ध्यान दें कि मोनो ट्यूटोरियल में एक मोनो lib प्रारंभकर्ता है, लेकिन इसका मतलब यह नहीं है कि मोनो का उपयोग करने वाले सभी libs ठीक से प्रारंभ किए गए हैं। विशेष रूप से mingw के libc को प्रारंभिकरण की आवश्यकता हो सकती है, क्योंकि वे आमतौर पर ctors के माध्यम से प्रारंभ किए जाते हैं।मेरे (बहुत प्रारंभिक) MinGW गोंद कोड यहाँ है:

http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/ide/fpmingw.pas?view=markup

दूसरी ओर, एक DLL में यह एक DLL प्रारंभ दिनचर्या के माध्यम से प्रारंभ किया जा सकता है।

मैं अपने आप को GDB एक lib के रूप में निर्माण और (हालांकि, मुझे DLL बनाने के लिए के बाद से है कि एक विकल्प था प्रेरणा नहीं था पांचवें वेतन आयोग में स्थिर)

नोट में इसका इस्तेमाल करने में सक्षम है कि यदि आप वास्तव में इसे स्वयं करना है यह एक आसान तरीका नहीं है।

+1

मुझे नहीं पता कि यह मदद करता है या नहीं, लेकिन मोनो रनटाइम विजुअल स्टूडियो 2008 द्वारा भी निर्मित किया जा सकता है। समाधान फाइलें/mono/msvc में हैं। – jpobst

+0

मुझे लगता है कि डीएलएल मार्ग के लिए बेहतर होगा, जो डेल्फी के लिए एकमात्र तरीका है। (अच्छी तरह से सैद्धांतिक रूप से, स्थिर रूप से जब बीसीबी के साथ बनाया गया काम भी कर सकता है) –

2

यह article by Rudy Velthuis एक उदाहरण कैसे डेल्फी के लिए एक सी lib लिंक को दर्शाता है। कुछ काम के साथ इस तकनीक का उपयोग कर डेल्फी से mono_jit_init तक पहुंचना संभव होना चाहिए।

+0

मोनो एलजीपीएल है, इसलिए विंडोज़ पर स्थिर लिंकिंग को नोवेल से वाणिज्यिक लाइसेंस प्राप्त करने की आवश्यकता है, जैसा कि http://www.mono-project.com/Scripting_With_Mono ("लाइसेंसिंग" के लिए खोजें) में बताया गया है। – mghie

+0

क्या आप वाकई इसे सही ढंग से पढ़ते हैं? मैं समझता हूं कि आपको एक वाणिज्यिक लाइसेंस की आवश्यकता है यदि आप मोनो * और * एम्बेड करना चाहते हैं तो टिंकरिंग से बचने के लिए अपने आवेदन के मोनो बिट तक पहुंच से इनकार करना चाहते हैं। –

+0

लिंक किया गया आलेख डेली कोड में स्थिर रूप से सी पुस्तकालयों को जोड़ने से संबंधित है। इस तरह से मोनो को लिंक करना लाइसेंस तोड़ देगा, क्योंकि अब आप इसे एक और हालिया संस्करण से प्रतिस्थापित नहीं कर सकते हैं। एलजीपीएल उपयोगकर्ताओं के अधिकार को "टिंकर" के अधिकार की रक्षा करने के लिए बिल्कुल सही है, इसलिए बोलने के लिए। यदि ओटीओएच mono.dll का उपयोग किया जाना है, तो डीएलएल उपभोग करने के मानक तरीके लागू होंगे, और Velthuis लेख में जानकारी वास्तव में उसमें मदद नहीं करेगा। – mghie

2

आप http://www.remobjects.com/hydra.aspx पर एक नज़र डालना चाहते हैं।

+0

मेरे पास हाइड्रा है, लेकिन यह वास्तव में उस पते को संबोधित नहीं करता है जिसे मैं पूरा करने की कोशिश कर रहा हूं। अर्थात् एक नेट रनटाइम को एम्बेड करने और डेल्फी के साथ तंग देशी एकीकरण प्रदान करने में सक्षम हो। हाइड्रा बीटीडब्ल्यू का एक अच्छा उपकरण है। –