2013-08-10 3 views
5

मैं यूडीके से सी # डीएल बांधने पर काम कर रहा हूं, जिसमें आपको बूल मानों के लिए एक हस्ताक्षरित 32 बिट पूर्णांक वापस करना होगा - इसलिए 0 झूठा है, कुछ भी बड़ा है सच हैं। UDK मूल्य हो जाता है और सही या गलत में बदल देता है ...सी # रिटर्निंग UInt32 बनाम Int32 - C# सोच 0 और 1 इंट 32

मैं कुछ कोड कर रहा था और पाया इस:

"त्रुटि:

[DllExport("CheckCaps", CallingConvention = CallingConvention.StdCall)] 
    public static UInt32 CheckCaps() 
    { 
     return (Console.CapsLock ? 1 : 0); 
    } 

मुझे त्रुटि दे दी है , परोक्ष 'uint' में बदल सकते हैं नहीं प्रकार 'int'। एक स्पष्ट रूपांतरण मौजूद है (यदि आप एक डाली याद कर रहे हैं?) "

जब मैं त्रुटि को समझते हैं, मैं फ्लॉप जिस तरह से यह सी # की स्ट्रिंग typecasting के साथ इस मुद्दे, तो आप इस अगर जहां की तरह लग रहा से

  if (File.Exists(filepath)) 
      return 1; 
     else 
      return 0; 

करने से पहले यह मुद्दा है:

int example = 5; 
Console.Writeline(example); 
Console.Writeline(example + ""); 

पहले Console.WriteLine एक त्रुटि दे देंगे क्योंकि सी # एक स्ट्रिंग

मैं समझता हूं कि इन त्रुटियों के पीछे तार्किक कारण हैं (जैसा कि वे इन स्थितियों में होते हैं), लेकिन कनवर्ट करने के अलावा इस के लिए कोई फिक्स है। TUUInt32 (1) और कनवर्ट करें। ToUInt32 (0)?

(मैं एक फिक्स कैसे आप तैरता के लिए 0.f जा सकते हैं के लिए समान के लिए आशा करती हूं कि, लेकिन अहस्ताक्षरित intergers के लिए)

+1

कृपया आईडीई और एक कंपाइलर के बीच अंतर जानें। विजुअल स्टूडियो कुछ भी नहीं सोचता है, क्योंकि यह केवल एक विकास वातावरण है जो कई अलग-अलग भाषाओं और कंपाइलर्स होस्ट करता है। समस्या सी #, और * नहीं * विजुअल स्टूडियो के साथ है। भेद महत्वपूर्ण है। –

+0

क्षमा करें हाँ, मैं समझता हूं। यह मुझे आलसी था ... मैं –

उत्तर

9
के लिए है

नीचे

if (File.Exists(filepath)) 
    return 1; 
else 
    return 0; 

कोड संकलित सी # मानक के अनुसार क्योंकि

13.1.7 प्रकार int की एक निरंतर अभिव्यक्ति (§14.16) निरंतर अभिव्यक्ति के मूल्य प्रदान की है, टाइप करने के लिए sbyte, byte, short, ushort, uint, या ulong परिवर्तित किया जा सकता गंतव्य की सीमा के भीतर है प्रकार।

तो अपने पहले कोड स्निपेट या तो एक स्पष्ट डाली या एक U प्रत्यय की जरूरत है वहाँ, सशर्त भाव के लिए परिभाषित किया कि ऐसा कोई अंतर्निहित रूपांतरण है:

return Console.CapsLock ? 1U : 0; 

ध्यान दें कि केवल एक रूपांतरण/प्रत्यय आवश्यक है, क्योंकि ऊपर नियम 13.1.7 के आधार पर शून्य को uint में परिवर्तित किया जा सकता है।

+2

+1 से मेल खाने के लिए प्रश्न बदल दूंगा। अधिक जानकारीपूर्ण उत्तर। –

8

1u 1. 0u के लिए अहस्ताक्षरित शाब्दिक वाक्य रचना है 0.

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