2012-10-09 7 views
9

मैं स्केल कोड से संकलित एक जार फ़ाइल से ikvmc द्वारा उत्पन्न एक डीएलएल का उपयोग करने की कोशिश कर रहा हूं (हाँ मेरा दिन इतना अच्छा है)। स्कैला कंपाइलर ऑपरेटर ओवरलोड के लिए डॉलर संकेत वाले पहचानकर्ता उत्पन्न करता प्रतीत होता है, और IKVM जेनरेट डीएलएल में उपयोग करता है (मैं इसे परावर्तक में देख सकता हूं)। समस्या यह है कि सी # कोड में डॉलर के संकेत अवैध हैं, और इसलिए मैं उन तरीकों का संदर्भ नहीं दे सकता।सी # से डॉलर के संकेतों के साथ पहचानकर्ताओं का संदर्भ कैसे लें?

इस समस्या के आसपास काम करने का कोई तरीका?

+2

आप एक मजेदार दिन हो रही है, नहीं कर रहे हैं आप? –

+1

फ्लिपंट उत्तर "डीएलएल को फिर से लिखना" होगा। –

+0

@AndrewCooper मैं निश्चित रूप से Mono.Cecil का उपयोग कर रहा हूं, आप असेंबली के उन हिस्सों को फिर से लिख सकते हैं। – DaveShaw

उत्तर

6

आपको प्रतिबिंब का उपयोग करके फंकी विधियों तक पहुंचने में सक्षम होना चाहिए। अच्छा समाधान नहीं है, लेकिन कम से कम इसे काम करना चाहिए। डीएलएल में एपीआई की संरचना के आधार पर प्रतिबिंब कोड को स्थानांतरित करने के तरीकों के चारों ओर एक रैपर बनाने के लिए संभव हो सकता है। फिर अपने शेष कोड से बस अच्छे रैपर को कॉल करें।

विकल्प डीएलएल लक्ष्य में आईएल पर हैक करना और पहचानकर्ताओं को बदलना होगा। या अपने स्वयं के कोड पर कुछ पोस्ट-बिल्ड आईएल-हैकिंग करें।

उन तरीकों के लिए
1

लिखें समानार्थी शब्द:

def +(a:A,b:A) = a + b 
val plus = + _ 
+1

काम करेगा, लेकिन मैं मुख्य रूप से संग्रह कक्षाओं द्वारा प्रकट विधियों में रूचि रखता हूं। मैं उन सभी के विशेष संस्करण का उपयोग करने के लिए सभी कोड बदलना नहीं चाहता हूं। मैं शायद एक विशेष स्कैला कक्षा में रैपर बनाने का अंत कर दूंगा जो मैं तब सी # से उपयोग करूंगा। – Martin

0

मुझे डर है कि आप उन सदस्यों तक पहुँचने के लिए प्रतिबिंब का उपयोग करना होगा। भागने से बस आपके मामले में काम नहीं होता है।


लेकिन आप की thoose, जो यांत्रिकी भागने में रुचि मैं एक विवरण लिखा गया है के लिए।

सी # में आप कीवर्ड से बचने के लिए @ -sign का उपयोग कर सकते हैं और उन्हें पहचानकर्ता के रूप में उपयोग कर सकते हैं। बहरहाल, यह अमान्य वर्ण से बचने के लिए मदद नहीं करता है:

int i\u0064; // '\u0064' == 'd' 
id = 5; 

हाँ यह काम करता है:

bool @bool = false; 

वहाँ एक तरह से एक यूनिकोड बच क्रम का उपयोग करके अलग ढंग से पहचानकर्ता लिखने के लिए है। हालांकि, इस चाल के साथ भी आप अभी भी पहचानकर्ता में $ -ign का उपयोग नहीं कर सकते हैं। कोशिश कर रहा है ...

int i\u0024; // '\u0024' == '$' 

... कंपाइलर त्रुटि "Unexpected character '\u0024'" देता है। पहचानकर्ता अभी भी एक वैध पहचानकर्ता होना चाहिए! सी # कंपाइलर संभवतया प्री-प्रोसेसिंग में एस्केप अनुक्रम का समाधान करता है और परिणामी पहचानकर्ता का इलाज करता है जैसे कि इसे सामान्य रूप से

तो यह किसके लिए अच्छा भाग रहा है? हो सकता है कि यह आपकी मदद कर सके, अगर कोई विदेशी भाषा चरित्र का उपयोग करता है जो आपके कीबोर्ड पर नहीं है।

int \u00E4; // German a-Umlaut 
ä = 5; 

+1

इस समस्या के आसपास काम करने के लिए किसी भी तरह से इसका जवाब कैसे मिलता है? *? –

+0

@ ओम-नाम-नाम: यह नहीं है। मैं भागने की संभावनाओं का पता लगाना चाहता था और दिखाता हूं कि वे समस्या को हल नहीं कर सकते हैं। मेरे उत्तर में एक अंतिम बयान जोड़ा गया। डाउनवॉटर को –

+0

। मुझे पता है कि यह समस्या का समाधान नहीं करता है। मैं सिर्फ यह बताना चाहता था कि यहां तक ​​कि विदेशी भागने की व्यवस्था भी मदद नहीं करेगी। क्या विभिन्न दृष्टिकोणों की खोज में कुछ गड़बड़ है? –

4

शायद आप नाम बदलने के लिए इन पहचानकर्ता इस तरह वे कोई डॉलर चिह्न है iKVM सिखा सकते हैं? मैं सुपर परिचित नहीं हूँ, लेकिन एक त्वरित खोज मुझे इन पर कहा:

http://weblog.ikvm.net/default.aspx?date=2005-05-02

What is the format of the Remap XML file for IKVM?

String and complex data types in Map.xml for IKVM!

अच्छा शिकार

+0

आह! वास्तव में बहुत दिलचस्प है! मेरी समस्या हल हो सकती है, मैं एक नज़र रखूंगा। – Martin

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