2013-08-10 31 views
5
Sana bool değerleri için bir işaretsiz 32 bit tamsayı dönmek zorunda olduğu UDK için bir C# dll bağlama, üzerinde çalışıyorum

- dolayısıyla 0 yanlış bir şey daha büyüktür doğru.C# - C# 0 ve 1 düşünerek Int32

"Hata:

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

Bana hata verdi: UDK

Bu bazı kod yapıyor ve bulundu ... değerini alır ve doğru veya yanlış dönüştürür , örtük 'uint' tip 'int' dönüştürülemez. bir açık dönüşüm (bir döküm eksik?) Varlığından"

hatası anlamakla birlikte, Bu defa varsa dize tiplemeleri ile C# 'ın sorunu benziyor Yoldan

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

yapmadan önce bu sorunu yoktu:

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

ilk Console.WriteLine bir hata verecektir çünkü C#

Dizgiyi otomatik olarak yazmaz, bu hataların ardında mantıksal nedenler olduğunu anlıyorum (bu durumlarda ortaya çıktıkça), ancak bunun için Convert.ToUInt32 (1) ve Convert yapmaktan başka bir düzeltme var. ToUInt32 (0)?

(Ben yüzen için 0.f nasıl gidebiliriz benzeyen bir düzeltme için umut ediyorum, ama imzasız intergers için)

+1

Lütfen bir IDE ile derleyici arasındaki farkı öğrenin. Visual Studio, birçok farklı dili ve derleyiciyi barındıran bir geliştirme ortamı olduğu için hiçbir şey düşünmüyor. Sorun, C# ve * Visual Studio ile değil. Ayrım önemlidir. –

+0

Üzgünüz, bunu anlıyorum. Tembel olmama neden oldu ... Soruyu –

cevap

9
içindir

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

aşağıdaki kod derler standart C# göre, çünkü

13.1.7 tip int bir sabit ekspresyon (§14.16) sabit ekspresyon değeri sağlarlar, sbyte, byte, short, ushort, uint veya ulong tip dönüştürülebilir hedef aralığında yazın.

ilk kod parçacığı açık bir döküm veya U eki ya ihtiyacı böylece koşullu ifadeler için tanımlanmış böyle örtülü hiçbir dönüşüm vardır:

return Console.CapsLock ? 1U : 0; 

Not yalnızca bir dönüşüm/son ek gereklidir, Çünkü sıfır, yukarıdaki 13.1.7 kuralına göre uint'a dönüştürülebilir.

+2

+1 ile eşleştireceğim. Çok daha bilgilendirici bir cevap. –

8

1u 1. 0u için imzasız değişmez sözdizimi 0.