2011-06-03 18 views
11

जावा में डीएलएल से मूल विधि जावा में इनपुट पैरामीटर बाइट्स - बाइट [] के सरणी है। यदि हम सी # से उसी विधि का उपयोग करते हैं तो यह EntryPointNotFoundException फेंकता है।जावा बाइट सी # बाइट के समान है?

क्या जावा और सी # में बाइट [] की वजह से अलग-अलग चीजें हैं? और यदि ऐसा है तो मैं C# से देशी फ़ंक्शन का उपयोग कैसे करूं?

+0

सी # sbyte जावा बाइट के समान है? – Sergey

+0

हां, वे दोनों चौड़ाई 8-बिट्स के साथ हस्ताक्षर किए गए हैं और -128 से 127 – evilone

उत्तर

13

जावा में हस्ताक्षरित प्रकारों की कमी है। विशेष रूप से, जावा में एक हस्ताक्षरित बाइट के लिए एक आदिम प्रकार की कमी है। जावा बाइट प्रकार पर हस्ताक्षर किए गए हैं, जबकि सी # बाइट हस्ताक्षरित है और sbyte हस्ताक्षरित है।

+1

पेडेंटिक रूप से, 'char' (और कुछ कह सकते हैं' बूल') एक हस्ताक्षरित प्रकार है ;-) लेकिन अन्यथा, हाँ। सच सच। –

6

क्या जावा और सी # में बाइट [] की वजह से अलग-अलग चीजें हैं?

हां।

  • endianness: आंतरिक जावा भंडार बातें बिग एन्डियन के रूप में है, जबकि नेट डिफ़ॉल्ट रूप से लिटल एन्डियन है।
  • हस्ताक्षर: सी # बाइट्स हस्ताक्षरित हैं। जावा बाइट्स पर हस्ताक्षर किए गए हैं।

different results when converting int to byte array - .NET vs Java देखें।

+9

के बीच सीमा है ... * बाइट्स * अंतहीनता है? –

+1

एनएजी, आप सही हैं - ठीक हो जाएंगे। सोने के लिए समय ... –

+1

पहले, @pst सही है और बाइट्स में अंतहीनता नहीं है (परिभाषा के अनुसार)। दूसरा, अंतराल केवल तभी देखा जा सकता है जब डेटा क्रमबद्ध हो। जेएनआई/जेएनए एंडियननेस में निष्पादन मंच के समान ही है। –

2

मूल कार्य का हस्ताक्षर क्या है? आप जावा और सी # में इसे कैसे घोषित करते हैं?

EntryPointNotFoundException के लिए सबसे आम कारण यह है कि फ़ंक्शन का नाम उलझा हुआ है (esp। True अगर फ़ंक्शन सी ++ में लिखा गया है) या गलत वर्तनी है।

समस्या का एक अन्य स्रोत WinAPI फ़ंक्शन के लिए 'डब्ल्यू' और 'ए' प्रत्यय है जो कार्यों के एएनएसआई और यूनिकोड संस्करणों को अलग करने के लिए उपयोग किया जाता है। .NET इंटरऑप तंत्र फ़ंक्शन प्रत्यय का अनुमान लगाने का प्रयास कर सकता है, ताकि यह भ्रम का स्रोत हो,

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