2013-08-10 21 views
5

私はbool値の符号なし32ビット整数を返さなければならないUDKへのC#dllバインドに取り組んでいます。本当です。 UDKは値を取得し、trueまたはfalseのいずれかに変換し...UInt32とInt32 - 考えている0と1はInt32です。

私はいくつかのコードを実行すると、この発見された:

「エラー:

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

は私のエラーを与えたが、暗黙のうちに「UINT」にタイプ「int型」を変換できません、私はエラーを理解しながら。明示的 変換は、(あなたはキャストが欠けている?)」

存在しますC#のため

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

最初Console.WriteLineをエラーを与える:私はあなたがこれを持っている場合、それは文字列型キャストとC#の問題のように見える方法で、より

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

を行う前に、この問題を持っていませんでし文字列へのキャストオートメーションが行われません

これらのエラーの背後に論理的な理由があることは理解していますが、Convert.ToUInt32(1)とConvert以外の修正方法があります。 ToUInt32(0)?

(私はあなたがフロートのため0.fに行くことができる方法に似修正のために願っていますが、符号なしintergers用)

+1

IDEとコンパイラの違いを知ってください。 Visual Studioは何も考えていません。これは単に複数の異なる言語とコンパイラをホストする開発環境であるためです。問題はC#であり、* Visual Studioではありません。この区別は重要です。 –

+0

申し訳ありません、私はそれを理解しています。それは私が怠け者だった...私は –

答えて

9
のためであります

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

以下のコードは、コンパイルされ、標準的なC#に応じため

13.1.7タイプintの定数式(14.16)は、定数式の値を提供し、sbytebyteshortushortuint、又はulong型に変換することができる宛先の範囲内でありますタイプ。

あなたの最初のコードスニペットは、明示的なキャストやU接尾語のいずれかを必要とするように、条件式のために定義されているようには暗黙の型変換は、ありません。唯一の変換/接尾辞が必要であること

return Console.CapsLock ? 1U : 0; 

注意、上記の規則13.1.7に基づいてゼロをuintに変換することができるからです。

+2

+1に一致するように質問を変更します。もっと有益な答え。 –

8

1u 1. 0uための符号なしリテラル構文では0

関連する問題